<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="idp15052415680"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Руководство пользователя Git</font></font></h1></div></div><hr></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="preface"><a href="#idp15052432592"></a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">1. Репозитории и филиалы</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как получить репозиторий Git</font></font></a></span></dt><dt><span class="section"><a href="#how-to-check-out"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как проверить другую версию проекта</font></font></a></span></dt><dt><span class="section"><a href="#understanding-commits"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: коммиты</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: коммиты, родители и достижимость</font></font></a></span></dt><dt><span class="section"><a href="#history-diagrams"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: диаграммы истории</font></font></a></span></dt><dt><span class="section"><a href="#what-is-a-branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: что такое ветка?</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Управление ветками</font></font></a></span></dt><dt><span class="section"><a href="#detached-head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение старой версии без создания новой ветки</font></font></a></span></dt><dt><span class="section"><a href="#examining-remote-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение веток из удаленного репозитория</font></font></a></span></dt><dt><span class="section"><a href="#how-git-stores-references"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Именование веток, тегов и других ссылок</font></font></a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обновление репозитория с помощью git fetch</font></font></a></span></dt><dt><span class="section"><a href="#fetching-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение веток из других репозиториев</font></font></a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">2. Изучение истории Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как использовать биссектрису, чтобы найти регрессию</font></font></a></span></dt><dt><span class="section"><a href="#naming-commits"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Именование коммитов</font></font></a></span></dt><dt><span class="section"><a href="#creating-tags"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание тегов</font></font></a></span></dt><dt><span class="section"><a href="#browsing-revisions"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Просмотр редакций</font></font></a></span></dt><dt><span class="section"><a href="#generating-diffs"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Генерация различий</font></font></a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Просмотр старых версий файлов</font></font></a></span></dt><dt><span class="section"><a href="#history-examples"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Примеры</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подсчет количества коммитов на ветке</font></font></a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проверьте, указывают ли две ветки на одну и ту же историю</font></font></a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Найти первую версию с тегами, включая заданное исправление</font></font></a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отображение коммитов, уникальных для данной ветки</font></font></a></span></dt><dt><span class="section"><a href="#making-a-release"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание журнала изменений и архива для выпуска программного обеспечения</font></font></a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Поиск коммитов со ссылкой на файл с заданным содержимым</font></font></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">3. Разработка с помощью Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Сказать Git свое имя</font></font></a></span></dt><dt><span class="section"><a href="#creating-a-new-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание нового репозитория</font></font></a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как сделать коммит</font></font></a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание хороших сообщений фиксации</font></font></a></span></dt><dt><span class="section"><a href="#ignoring-files"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Игнорирование файлов</font></font></a></span></dt><dt><span class="section"><a href="#how-to-merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как слить</font></font></a></span></dt><dt><span class="section"><a href="#resolving-a-merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разрешение слияния</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение помощи в разрешении конфликтов во время слияния</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отмена слияния</font></font></a></span></dt><dt><span class="section"><a href="#fast-forwards"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ускоренное слияние</font></font></a></span></dt><dt><span class="section"><a href="#fixing-mistakes"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибок</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибки с новым коммитом</font></font></a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибки путем переписывания истории</font></font></a></span></dt><dt><span class="section"><a href="#checkout-of-path"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение старой версии файла</font></font></a></span></dt><dt><span class="section"><a href="#interrupted-work"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Временно отложить незавершенную работу</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обеспечение хорошей производительности</font></font></a></span></dt><dt><span class="section"><a href="#ensuring-reliability"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обеспечение надежности</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проверка репозитория на наличие повреждений</font></font></a></span></dt><dt><span class="section"><a href="#recovering-lost-changes"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Восстановление утерянных изменений</font></font></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">4. Поделиться разработкой с другими</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение обновлений с помощью git pull</font></font></a></span></dt><dt><span class="section"><a href="#submitting-patches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отправка патчей в проект</font></font></a></span></dt><dt><span class="section"><a href="#importing-patches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Импорт патчей в проект</font></font></a></span></dt><dt><span class="section"><a href="#public-repositories"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Публичные репозитории Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка публичного репозитория</font></font></a></span></dt><dt><span class="section"><a href="#exporting-via-git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Экспорт репозитория Git по протоколу Git</font></font></a></span></dt><dt><span class="section"><a href="#exporting-via-http"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Экспорт репозитория git через HTTP</font></font></a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отправка изменений в публичный репозиторий</font></font></a></span></dt><dt><span class="section"><a href="#forcing-push"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Что делать, если пуш не работает</font></font></a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка общего репозитория</font></font></a></span></dt><dt><span class="section"><a href="#setting-up-gitweb"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разрешение просмотра репозитория в Интернете</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#how-to-get-a-git-repository-with-minimal-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как получить репозиторий Git с минимальной историей</font></font></a></span></dt><dt><span class="section"><a href="#sharing-development-examples"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Примеры</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ведение тематических веток для сопровождающего подсистемы Linux</font></font></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">5. Перезапись истории и поддержание серий патчей.</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание идеальной серии патчей</font></font></a></span></dt><dt><span class="section"><a href="#using-git-rebase"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обновление серии патчей с помощью git rebase</font></font></a></span></dt><dt><span class="section"><a href="#rewriting-one-commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перезапись одного коммита</font></font></a></span></dt><dt><span class="section"><a href="#reordering-patch-series"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изменение порядка следования или выбор из серии патчей</font></font></a></span></dt><dt><span class="section"><a href="#interactive-rebase"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Использование интерактивных перемещений</font></font></a></span></dt><dt><span class="section"><a href="#patch-series-tools"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Прочие инструменты</font></font></a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проблемы с перезаписью истории</font></font></a></span></dt><dt><span class="section"><a href="#bisect-merges"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Почему разделение коммитов слияния пополам может быть сложнее, чем разделение пополам линейной истории</font></font></a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">6. Расширенное управление филиалами</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение отдельных веток</font></font></a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git fetch и перемотка вперед</font></font></a></span></dt><dt><span class="section"><a href="#forcing-fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Принуждение git fetch к обновлению без перемотки вперед</font></font></a></span></dt><dt><span class="section"><a href="#remote-branch-configuration"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка веток удаленного отслеживания</font></font></a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">7. Концепции Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">База данных объектов</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект фиксации</font></font></a></span></dt><dt><span class="section"><a href="#tree-object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект дерева</font></font></a></span></dt><dt><span class="section"><a href="#blob-object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект Blob</font></font></a></span></dt><dt><span class="section"><a href="#trust"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Доверять</font></font></a></span></dt><dt><span class="section"><a href="#tag-object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект тега</font></font></a></span></dt><dt><span class="section"><a href="#pack-files"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как Git эффективно хранит объекты: упаковка файлов</font></font></a></span></dt><dt><span class="section"><a href="#dangling-objects"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Болтающиеся предметы</font></font></a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Восстановление после повреждения репозитория</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#the-index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Индекс</font></font></a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">8. Подмодули</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#pitfalls-with-submodules"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подводные камни с подмодулями</font></font></a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">9. Низкоуровневые операции Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Доступ к объектам и манипулирование</font></font></a></span></dt><dt><span class="section"><a href="#the-workflow"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Рабочий процесс</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочий каталог → индекс</font></font></a></span></dt><dt><span class="section"><a href="#index-to-object-database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекс → база данных объектов</font></font></a></span></dt><dt><span class="section"><a href="#object-database-to-index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">база данных объектов → индекс</font></font></a></span></dt><dt><span class="section"><a href="#index-to-working-directory"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекс → рабочий каталог</font></font></a></span></dt><dt><span class="section"><a href="#tying-it-all-together"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Связывая все вместе</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение данных</font></font></a></span></dt><dt><span class="section"><a href="#merging-multiple-trees"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объединение нескольких деревьев</font></font></a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объединение нескольких деревьев, продолжение</font></font></a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">10. Взлом Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#object-details"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Формат хранения объекта</font></font></a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исходный код Git с высоты птичьего полета</font></font></a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">11. Глоссарий Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#git-explained"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git объяснил</font></font></a></span></dt></dl></dd><dt><span class="appendix"><a href="#git-quick-start"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">A. Краткий справочник по Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание нового репозитория</font></font></a></span></dt><dt><span class="section"><a href="#managing-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Управление филиалами</font></font></a></span></dt><dt><span class="section"><a href="#exploring-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение истории</font></font></a></span></dt><dt><span class="section"><a href="#making-changes"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Внесение изменений</font></font></a></span></dt><dt><span class="section"><a href="#merging"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Слияние</font></font></a></span></dt><dt><span class="section"><a href="#sharing-your-changes"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Делимся вашими изменениями</font></font></a></span></dt><dt><span class="section"><a href="#repository-maintenance"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обслуживание репозитория</font></font></a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Б. Примечания и список дел для этого руководства</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#todo-list"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Список дел</font></font></a></span></dt></dl></dd></dl></div>

<div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="idp15052432592"></a></h1></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git - это быстрая распределенная система контроля версий.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это руководство предназначено для чтения кем-то с базовыми навыками работы с командной строкой UNIX, но не знакомыми с Git.</font></font></p>
<p><a class="xref" href="#repositories-and-branches" title="Глава 1. Репозитории и филиалы"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 1, </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Репозитории и ветви,</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и </font></font><a class="xref" href="#exploring-git-history" title="Глава 2. Изучение истории Git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 2, </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение истории Git,</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> объясняют, как получить и изучить проект с помощью git - прочтите эти главы, чтобы узнать, как построить и протестировать конкретную версию программного проекта, найти регрессии и т. Д. .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Людям, которым необходимо заниматься реальной разработкой, также следует прочитать
 </font></font><a class="xref" href="#Developing-With-git" title="Глава 3. Разработка с помощью Git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">главу 3 « </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разработка с помощью Git»</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и </font></font><a class="xref" href="#sharing-development" title="Глава 4. Совместное использование разработки с другими"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">главу 4 « </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Совместное использование разработки с другими»</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В следующих главах рассматриваются более специализированные темы.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исчерпывающая справочная документация доступна на страницах руководства или </font></font><a class="ulink" href="git-help.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">с помощью</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> команды </font><a class="ulink" href="git-help.html" target="_top"><font style="vertical-align: inherit;">git-help (1)</font></a><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Например, для команды
 </font></font><code class="literal">git clone &lt;repo&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вы можете использовать:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ man git-clone</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git help clone</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В последнем случае вы можете использовать любую программу просмотра вручную; </font><font style="vertical-align: inherit;">см.
 </font></font><a class="ulink" href="git-help.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-help (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения дополнительной информации.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">См. Также </font></font><a class="xref" href="#git-quick-start" title="Приложение A. Краткое руководство по Git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Приложение A, </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Краткое</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> руководство Git для краткого обзора команд Git без каких-либо объяснений.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Наконец, см. </font></font><a class="xref" href="#todo" title="Приложение Б. Примечания и список дел для этого руководства"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Приложение B, </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Примечания и список дел к этому руководству</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , чтобы узнать о том, как вы можете помочь сделать это руководство более полным.</font></font></p>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="repositories-and-branches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 1. Репозитории и филиалы</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#how-to-get-a-git-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как получить репозиторий Git</font></font></a></span></dt><dt><span class="section"><a href="#how-to-check-out"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как проверить другую версию проекта</font></font></a></span></dt><dt><span class="section"><a href="#understanding-commits"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: коммиты</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: коммиты, родители и достижимость</font></font></a></span></dt><dt><span class="section"><a href="#history-diagrams"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: диаграммы истории</font></font></a></span></dt><dt><span class="section"><a href="#what-is-a-branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: что такое ветка?</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Управление ветками</font></font></a></span></dt><dt><span class="section"><a href="#detached-head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение старой версии без создания новой ветки</font></font></a></span></dt><dt><span class="section"><a href="#examining-remote-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение веток из удаленного репозитория</font></font></a></span></dt><dt><span class="section"><a href="#how-git-stores-references"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Именование веток, тегов и других ссылок</font></font></a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обновление репозитория с помощью git fetch</font></font></a></span></dt><dt><span class="section"><a href="#fetching-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение веток из других репозиториев</font></font></a></span></dt></dl></div>

<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="how-to-get-a-git-repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как получить репозиторий Git</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Будет полезно иметь репозиторий Git для экспериментов, пока вы читаете это руководство.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Лучший способ получить его - использовать команду </font></font><a class="ulink" href="git-clone.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-clone (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для загрузки копии существующего репозитория. </font><font style="vertical-align: inherit;">Если у вас еще нет проекта, вот несколько интересных примеров:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        # Сам Git (загрузка около 40 МБ):</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git clone git: //git.kernel.org/pub/scm/git/git.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        # ядро ​​Linux (загрузка примерно 640 МБ):</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Первоначальный клон может занять много времени для большого проекта, но вам нужно будет клонировать только один раз.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда clone создает новый каталог, названный в честь проекта ( </font></font><code class="literal">git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или </font></font><code class="literal">linux</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в приведенных выше примерах). </font><font style="vertical-align: inherit;">После того, как вы войдете в этот каталог, вы увидите, что он содержит копию файлов проекта, называемую </font></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочим деревом</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , вместе со специальным каталогом верхнего уровня с именем </font></font><code class="literal">.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, который содержит всю информацию об истории проекта.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="how-to-check-out"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как проверить другую версию проекта</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git лучше всего рассматривать как инструмент для хранения истории коллекции файлов. </font><font style="vertical-align: inherit;">Он хранит историю в виде сжатого набора взаимосвязанных снимков содержимого проекта. </font><font style="vertical-align: inherit;">В Git каждая такая версия называется </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксацией</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Эти снимки не обязательно расположены в одной строке от самых старых до самых новых; </font><font style="vertical-align: inherit;">вместо этого работа может идти одновременно по параллельным линиям развития, называемым </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветвями</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , которые могут сливаться и расходиться.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Один репозиторий Git может отслеживать разработку в нескольких ветках. </font><font style="vertical-align: inherit;">Он делает это, храня список </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">заголовков,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> которые ссылаются на последний коммит в каждой ветке; </font><font style="vertical-align: inherit;">команда </font></font><a class="ulink" href="git-branch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-branch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> показывает список глав веток:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git ветка</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
* мастер</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Недавно клонированный репозиторий содержит одну головку ветки, по умолчанию названную «master», с рабочим каталогом, инициализированным в соответствии с состоянием проекта, на который ссылается эта голова ветки.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В большинстве проектов также используются </font></font><a class="link" href="#def_tag"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">теги</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Теги, как и заголовки, являются ссылками на историю проекта и могут быть перечислены с помощью команды
 </font></font><a class="ulink" href="git-tag.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-tag (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git tag -l</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.11</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.11-дерево</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.12</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.12-RC2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.12-rc3</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.12-rc4</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.12-rc5</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.12-rc6</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v2.6.13</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ожидается, что теги всегда будут указывать на одну и ту же версию проекта, а руководители должны продвигаться по мере продвижения разработки.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создайте новую ветку, указывающую на одну из этих версий, и проверьте ее с помощью </font></font><a class="ulink" href="git-switch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-switch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch -c новый v2.6.13</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Затем рабочий каталог отражает содержимое, которое было у проекта, когда он был помечен как v2.6.13, а </font></font><a class="ulink" href="git-branch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-branch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> показывает две ветки, где звездочкой </font><font style="vertical-align: inherit;">отмечена текущая </font><font style="vertical-align: inherit;">извлеченная ветка:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git ветка</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  мастер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
* новый</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы решили, что предпочитаете версию 2.6.17, вы можете изменить текущую ветвь, указав вместо этого на v2.6.17, с помощью</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git reset --hard v2.6.17</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что если текущая глава ветки была вашей единственной ссылкой на конкретный момент в истории, то сброс этой ветки может оставить вас без возможности найти историю, на которую она указывала; </font><font style="vertical-align: inherit;">поэтому используйте эту команду осторожно.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="understanding-commits"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: коммиты</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Каждое изменение в истории проекта представлено фиксацией. </font><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-show.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> показывает самую последнюю фиксацию в текущей ветке:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
совершить 17cf781661e6d38f737f15f53ab552f1e95960d7</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Автор: Линус Торвальдс &lt;torvalds@ppc970.osdl.org. (None)&gt;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Дата: Вт, 19 апреля, 14:11:06 2005 -0700</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    Удалить повторяющийся вызов getenv (DB_ENVIRONMENT)</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    Отметил Тони Лак.</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
diff --git a / init-db.cb / init-db.c</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
индекс 65898fa..b002dc6 100644</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
--- a / init-db.c</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+++ b / init-db.c</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
@@ -7,7 +7,7 @@</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 int main (int argc, char ** argv)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 {</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
- char * sha1_dir = getenv (DB_ENVIRONMENT), * путь;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ char * sha1_dir, * путь;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        int len, я;</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        if (mkdir (". git", 0755) &lt;0) {</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как видите, коммит показывает, кто внес последнее изменение, что они сделали и почему.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Каждая фиксация имеет идентификатор из 40 шестнадцатеричных цифр, иногда называемый «именем объекта» или «идентификатором SHA-1», который отображается в первой строке </font></font><code class="literal">git show</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вывода. </font><font style="vertical-align: inherit;">Обычно вы можете ссылаться на фиксацию по более короткому имени, например, тегу или имени ветки, но это более длинное имя также может быть полезно. </font><font style="vertical-align: inherit;">Что наиболее важно, это глобально уникальное имя для этого коммита: поэтому, если вы сообщите кому-то другому имя объекта (например, в электронном письме), тогда вам гарантировано, что это имя будет относиться к той же фиксации в их репозитории, что и в вашем ( при условии, что в их репозитории есть эта фиксация). </font><font style="vertical-align: inherit;">Поскольку имя объекта вычисляется как хэш содержимого фиксации, вам гарантируется, что фиксация никогда не изменится, если не изменится и его имя.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Фактически, в </font></font><a class="xref" href="#git-concepts" title="Глава 7. Концепции Git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">главе 7, </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">посвященной концепциям Git,</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> мы увидим, что все, что хранится в истории Git, включая данные файлов и содержимое каталогов, хранится в объекте с именем, которое является хешем его содержимого.</font></font></p>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="understanding-reachability"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: коммиты, родители и достижимость</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Каждая фиксация (кроме самой первой фиксации в проекте) также имеет родительскую фиксацию, которая показывает, что произошло до этой фиксации. </font><font style="vertical-align: inherit;">Следование по цепочке родителей в конечном итоге вернет вас к началу проекта.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако коммиты не составляют простой список; </font><font style="vertical-align: inherit;">Git позволяет линиям разработки расходиться, а затем снова сходиться, и точка, в которой две линии разработки снова сходятся, называется «слиянием». </font><font style="vertical-align: inherit;">Таким образом, фиксация, представляющая слияние, может иметь более одного родителя, причем каждый родитель представляет самую последнюю фиксацию на одной из линий разработки, ведущих к этой точке.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Лучший способ увидеть, как это работает, - использовать команду </font></font><a class="ulink" href="gitk.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">gitk (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
; </font><font style="vertical-align: inherit;">запуск gitk в репозитории Git и поиск коммитов слияния поможет понять, как Git организует историю.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Далее мы говорим, что фиксация X "достижима" из фиксации Y, если фиксация X является предком фиксации Y. Точно так же вы могли бы сказать, что Y является потомком X, или что существует цепочка родителей, ведущих от фиксации Y, чтобы зафиксировать X.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="history-diagrams"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: диаграммы истории</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Иногда мы будем представлять историю Git с помощью диаграмм, подобных приведенной ниже. </font><font style="vertical-align: inherit;">Коммиты показаны как «o», а связи между ними - линиями, обозначенными - / и \. </font><font style="vertical-align: inherit;">Время идет слева направо:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">         o - o - o &lt;- Ветвь A</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        /</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 о - о - о &lt;- мастер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         o - o - o &lt;- Ветвь B</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если нам нужно поговорить о конкретном коммите, символ «о» можно заменить другой буквой или цифрой.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="what-is-a-branch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Понимание истории: что такое ветка?</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда нам нужно быть точными, мы будем использовать слово «ветвь» для обозначения линии разработки и «заголовок ветки» (или просто «голова») для обозначения ссылки на самую последнюю фиксацию в ветке. </font><font style="vertical-align: inherit;">В приведенном выше примере заголовок ветки с именем «A» является указателем на одну конкретную фиксацию, но мы ссылаемся на строку из трех коммитов, ведущих к этой точке, поскольку все они являются частью «ветки A».</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако, когда не возникает путаницы, мы часто просто используем термин «ветвь» как для ветвей, так и для головок ветвей.</font></font></p>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="manipulating-branches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Управление ветками</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание, удаление и изменение веток выполняется быстро и легко; </font><font style="vertical-align: inherit;">вот краткое изложение команд:</font></font></p>
<div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">git branch</code></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
перечислить все ветки.
</font></font></dd><dt><span class="term"><code class="literal">git branch &lt;branch&gt;</code></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
создайте новую ветку с именем </font></font><code class="literal">&lt;branch&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, ссылаясь на ту же точку в истории, что и текущая ветка.
</font></font></dd><dt><span class="term"><code class="literal">git branch &lt;branch&gt; &lt;start-point&gt;</code></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
создать новую ветку с именем </font></font><code class="literal">&lt;branch&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, ссылающуюся
 </font></font><code class="literal">&lt;start-point&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, которая может быть указана как угодно, в том числе с использованием имени ветки или имени тега.
</font></font></dd><dt><span class="term"><code class="literal">git branch -d &lt;branch&gt;</code></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
удалить ветку </font></font><code class="literal">&lt;branch&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">; </font><font style="vertical-align: inherit;">если ветка не полностью объединена в свою восходящую ветвь или не содержится в текущей ветке, эта команда завершится ошибкой с предупреждением.
</font></font></dd><dt><span class="term"><code class="literal">git branch -D &lt;branch&gt;</code></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
удалить ветку </font></font><code class="literal">&lt;branch&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">независимо от ее объединенного статуса.
</font></font></dd><dt><span class="term"><code class="literal">git switch &lt;branch&gt;</code></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
сделать текущую ветку </font></font><code class="literal">&lt;branch&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, обновив рабочий каталог, чтобы отразить версию, на которую ссылается </font></font><code class="literal">&lt;branch&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></dd><dt><span class="term"><code class="literal">git switch -c &lt;new&gt; &lt;start-point&gt;</code></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
создать новую </font></font><code class="literal">&lt;new&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылку на </font><font style="vertical-align: inherit;">ветку </font></font><code class="literal">&lt;start-point&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и проверить ее.
</font></font></dd></dl></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для обозначения текущей ветви всегда можно использовать специальный символ «HEAD». </font><font style="vertical-align: inherit;">Фактически, Git использует файл с именем </font></font><code class="literal">HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в </font></font><code class="literal">.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каталоге, чтобы запомнить текущую ветку:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ cat .git / HEAD</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ссылка: ссылки / головы / мастер</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="detached-head"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение старой версии без создания новой ветки</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><code class="literal">git switch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">обычно ожидает заголовок ветки, но также принимает произвольный коммит при вызове с --detach; </font><font style="vertical-align: inherit;">например, вы можете проверить фиксацию, на которую ссылается тег:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git переключатель --detach v2.6.17</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Примечание: проверка версии 2.6.17.</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Вы находитесь в состоянии «отключенная ГОЛОВА». </font><font style="vertical-align: inherit;">Можно осмотреться, поэкспериментировать</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
изменения и зафиксировать их, и вы можете отказаться от любых коммитов, сделанных в этом</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
состояние, не влияя на какие-либо ветви, выполняя другое переключение.</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Если вы хотите создать новую ветку для сохранения созданных вами коммитов, вы можете</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
сделайте это (сейчас или позже), снова используя -c с командой switch. </font><font style="vertical-align: inherit;">Пример:</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  git switch -c имя_новой_ветки</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
HEAD теперь находится на 427abfa Linux v2.6.17</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Затем HEAD ссылается на SHA-1 фиксации вместо ветки, а ветка git показывает, что вы больше не находитесь в ветке:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ cat .git / HEAD</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
427abfa28afedffadfca9dd8b067eb6d36bac53f</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git ветка</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
* (отсоединено от v2.6.17)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  мастер</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В этом случае мы говорим, что ГОЛОВА «отсоединена».</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это простой способ проверить конкретную версию без необходимости придумывать имя для новой ветки. </font><font style="vertical-align: inherit;">Вы все еще можете создать новую ветку (или тег) для этой версии позже, если захотите.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="examining-remote-branches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение веток из удаленного репозитория</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">«Основная» ветвь, которая была создана во время клонирования, является копией HEAD в репозитории, из которого вы клонировали. </font><font style="vertical-align: inherit;">Однако у этого репозитория могут быть и другие ветки, и ваш локальный репозиторий хранит ветки, которые отслеживают каждую из этих удаленных веток, называемых ветвями удаленного отслеживания, которые вы можете просмотреть, используя </font></font><code class="literal">-r</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">опцию </font></font><a class="ulink" href="git-branch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-branch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git branch -r</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  origin / HEAD</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  origin / html</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  origin / maint</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  происхождение / человек</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  происхождение / хозяин</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  происхождение / следующий</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  происхождение / видел</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  происхождение / todo</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В этом примере источник называется удаленным репозиторием, или для краткости «удаленным». </font><font style="vertical-align: inherit;">Ветви этого репозитория с нашей точки зрения называются «удаленными ветвями». </font><font style="vertical-align: inherit;">Перечисленные выше ветки удаленного отслеживания были созданы на основе удаленных ветвей во время клонирования и будут обновляться </font></font><code class="literal">git fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(следовательно </font></font><code class="literal">git pull</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">) и </font></font><code class="literal">git push</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">См. Подробности
 </font></font><a class="xref" href="#Updating-a-repository-With-git-fetch" title="Обновление репозитория с помощью git fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в разделе «Обновление репозитория с помощью git fetch»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Возможно, вы захотите создать одну из этих веток удаленного отслеживания в своей собственной ветке, как и для тега:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch -c my-todo-copy origin / todo</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете проверить его </font></font><code class="literal">origin/todo</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">напрямую или написать одноразовый патч. </font><font style="vertical-align: inherit;">Увидеть </font></font><a class="link" href="#detached-head" title="Изучение старой версии без создания новой ветки"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">оторванную голову</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что имя origin - это просто имя, которое Git использует по умолчанию для ссылки на репозиторий, из которого вы клонировали.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="how-git-stores-references"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Именование веток, тегов и других ссылок</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ветви, ветки удаленного отслеживания и теги - все это ссылки на коммиты. </font><font style="vertical-align: inherit;">Все ссылки именуются разделенным косой чертой путем, начинающимся с </font></font><code class="literal">refs</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">; </font><font style="vertical-align: inherit;">имена, которые мы использовали до сих пор, на самом деле являются сокращениями:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Ветка </font></font><code class="literal">test</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">- это сокращение от </font></font><code class="literal">refs/heads/test</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Тег </font></font><code class="literal">v2.6.18</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">является сокращением </font></font><code class="literal">refs/tags/v2.6.18</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></li><li class="listitem">
<code class="literal">origin/master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">является сокращением от </font></font><code class="literal">refs/remotes/origin/master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Полное имя иногда полезно, если, например, когда-либо существует тег и ветка с тем же именем.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(Недавно созданные ссылки фактически хранятся в </font></font><code class="literal">.git/refs</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каталоге по пути, указанному в их имени. Однако из соображений эффективности они также могут быть упакованы вместе в один файл; см.
 </font></font><a class="ulink" href="git-pack-refs.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git-pack-refs (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В качестве еще одного полезного ярлыка "HEAD" репозитория можно ссылаться, просто используя имя этого репозитория. </font><font style="vertical-align: inherit;">Так, например, «origin» обычно является ярлыком для ветки HEAD в репозитории «origin».</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Полный список путей, которые Git проверяет на наличие ссылок, и порядок, который он использует, чтобы решить, какие из них выбрать при наличии нескольких ссылок с одним и тем же сокращенным именем, см. В разделе « </font></font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">УКАЗАНИЕ</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ИЗМЕНЕНИЙ» в </font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;">gitrevisions (7)</font></a><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Updating-a-repository-With-git-fetch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обновление репозитория с помощью git fetch</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После того, как вы клонируете репозиторий и зафиксируете несколько собственных изменений, вы можете проверить исходный репозиторий на наличие обновлений.</font></font></p>
<p><font style="vertical-align: inherit;"></font><code class="literal">git-fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда без аргументов, обновит все удаленное отслеживание ветвей до последней версии , </font><font style="vertical-align: inherit;">найденной в оригинальном хранилище. </font><font style="vertical-align: inherit;">Он не коснется ни одной из ваших собственных веток - даже «главной» ветки, которая была создана для вас в клоне.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fetching-branches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение веток из других репозиториев</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете отслеживать ветки из репозиториев, отличных от того, из которого вы клонировали, используя </font></font><a class="ulink" href="git-remote.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-remote (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git remote add staging git: //git.kernel.org/.../gregkh/staging.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git fetch постановка</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Из git: //git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 * [новая ветка] мастер -&gt; постановка / мастер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 * [новая ветка] staging-linus -&gt; staging / staging-linus</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 * [новая ветка] staging-next -&gt; staging / staging-next</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Новые ветки удаленного отслеживания будут храниться под заданным вами сокращенным именем </font></font><code class="literal">git remote add</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, в этом случае </font></font><code class="literal">staging</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git branch -r</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  origin / HEAD -&gt; origin / master</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  происхождение / хозяин</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  постановка / мастер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  постановка / staging-linus</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  постановка / постановка-следующий</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы запустите </font></font><code class="literal">git fetch &lt;remote&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">позже, ветки удаленного отслеживания для указанного </font></font><code class="literal">&lt;remote&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">будут обновлены.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы изучите файл </font></font><code class="literal">.git/config</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, вы увидите, что Git добавил новую строфу:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ cat .git / config</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[удаленная «постановка»]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        url = git: //git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        выборка = + ссылки / головы / *: ссылки / удаленные / постановка / *</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это то, что заставляет Git отслеживать ветки пульта ДУ; </font><font style="vertical-align: inherit;">вы можете изменить или удалить эти параметры конфигурации, отредактировав их </font></font><code class="literal">.git/config</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в текстовом редакторе. </font><font style="vertical-align: inherit;">(Подробности см. В разделе «КОНФИГУРАЦИОННЫЙ ФАЙЛ»
 </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .)</font></font></p>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="exploring-git-history"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 2. Изучение истории Git</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#using-bisect"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как использовать биссектрису, чтобы найти регрессию</font></font></a></span></dt><dt><span class="section"><a href="#naming-commits"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Именование коммитов</font></font></a></span></dt><dt><span class="section"><a href="#creating-tags"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание тегов</font></font></a></span></dt><dt><span class="section"><a href="#browsing-revisions"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Просмотр редакций</font></font></a></span></dt><dt><span class="section"><a href="#generating-diffs"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Генерация различий</font></font></a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Просмотр старых версий файлов</font></font></a></span></dt><dt><span class="section"><a href="#history-examples"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Примеры</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подсчет количества коммитов на ветке</font></font></a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проверьте, указывают ли две ветки на одну и ту же историю</font></font></a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Найти первую версию с тегами, включая заданное исправление</font></font></a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отображение коммитов, уникальных для данной ветки</font></font></a></span></dt><dt><span class="section"><a href="#making-a-release"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание журнала изменений и архива для выпуска программного обеспечения</font></font></a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Поиск коммитов со ссылкой на файл с заданным содержимым</font></font></a></span></dt></dl></dd></dl></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git лучше всего рассматривать как инструмент для хранения истории коллекции файлов. </font><font style="vertical-align: inherit;">Это достигается за счет сохранения сжатых снимков содержимого файловой иерархии вместе с «коммитами», которые показывают отношения между этими снимками.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git предоставляет чрезвычайно гибкие и быстрые инструменты для изучения истории проекта.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы начнем с одного специализированного инструмента, который полезен для поиска фиксации, которая привела к ошибке в проекте.</font></font></p>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="using-bisect"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как использовать биссектрису, чтобы найти регрессию</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, что версия 2.6.18 вашего проекта работала, но вылетает версия "master". </font><font style="vertical-align: inherit;">Иногда лучший способ найти причину такой регрессии - это выполнить полный перебор в истории проекта, чтобы найти конкретную фиксацию, вызвавшую проблему. </font><font style="vertical-align: inherit;">В
 </font><font style="vertical-align: inherit;">этом вам может помочь команда </font></font><a class="ulink" href="git-bisect.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-bisect (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git bisect start</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git bisect хорошо v2.6.18</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git bisect плохой мастер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Деление пополам: после этого осталось протестировать 3537 ревизий</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[65934a9a028b88e83e2b0f8b36618fe503349f8e] БЛОК: Сделайте USB-накопитель зависимым от SCSI, а не выбирайте его [попробуйте №6]</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы запустите </font></font><code class="literal">git branch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">на этом этапе, вы увидите, что Git временно переместил вас в «(без ветки)». </font><font style="vertical-align: inherit;">HEAD теперь отсоединен от любой ветки и указывает непосредственно на фиксацию (с идентификатором фиксации 65934), которая доступна из «master», но не из v2.6.18. </font><font style="vertical-align: inherit;">Скомпилируйте и протестируйте его и посмотрите, не вылетит ли он. </font><font style="vertical-align: inherit;">Предположим, это действительно сбой. </font><font style="vertical-align: inherit;">Потом:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git bisect плохо</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Деление пополам: 1769 правок осталось протестировать после этого</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[7eff82c8b1511017ae605f0c99ac275a7e21b867] i2c-core: удаление бесполезных битовых масок</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">проверяет старую версию. </font><font style="vertical-align: inherit;">Продолжайте в том же духе, сообщая Git на каждом этапе, хорошая или плохая версия, которую он дает, и обратите внимание, что количество ревизий, оставшихся для тестирования, каждый раз сокращается примерно вдвое.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Примерно после 13 тестов (в данном случае) он выдаст идентификатор фиксации виновной фиксации. </font><font style="vertical-align: inherit;">Затем вы можете проверить фиксацию с помощью
 </font></font><a class="ulink" href="git-show.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , узнать, кто ее написал, и отправить им отчет об ошибке с идентификатором фиксации. </font><font style="vertical-align: inherit;">Наконец, запустите</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git bisect reset</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">чтобы вернуть вас в ветку, в которой вы были раньше.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что версия, которая </font></font><code class="literal">git bisect</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">проверяется для вас на каждом этапе, является просто предложением, и вы можете попробовать другую версию, если считаете, что это будет хорошей идеей. </font><font style="vertical-align: inherit;">Например, иногда вы можете попасть в коммит, который сломал что-то несвязанное; </font><font style="vertical-align: inherit;">пробег</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git bisect визуализировать</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">который запустит gitk и пометит выбранную фиксацию маркером с надписью «bisect». </font><font style="vertical-align: inherit;">Выберите рядом безопасную фиксацию, запишите ее идентификатор и проверьте с помощью:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git reset --hard fb47ddb2db</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">затем проверьте, запустите </font></font><code class="literal">bisect good</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или, </font></font><code class="literal">bisect bad</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">если необходимо, и продолжайте.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вместо </font></font><code class="literal">git bisect visualize</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">а затем </font></font><code class="literal">git reset --hard
fb47ddb2db</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вы можете просто сказать Git, что хотите пропустить текущую фиксацию:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git bisect пропустить</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В этом случае, однако, Git, возможно, в конечном итоге не сможет отличить первый плохой коммит между некоторыми первыми пропущенными коммитами и более поздним плохим коммитом.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Есть также способы автоматизировать процесс деления пополам, если у вас есть тестовый сценарий, который может отличить хороший коммит от плохого. </font><font style="vertical-align: inherit;">См.
 </font></font><a class="ulink" href="git-bisect.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git-bisect (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения дополнительной информации об этой и других </font></font><code class="literal">git
bisect</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">функциях.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="naming-commits"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Именование коммитов</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы уже видели несколько способов именования коммитов:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Имя объекта из 40 шестнадцатеричных цифр
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
имя ветки: относится к фиксации во главе данной ветки
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
имя тега: относится к фиксации, на которую указывает данный тег (мы видели, что ветки и теги являются частными случаями
 </font></font><a class="link" href="#how-git-stores-references" title="Именование веток, тегов и других ссылок"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылок</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ).
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ГОЛОВА: относится к главе текущей ветви
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Есть еще много чего; </font><font style="vertical-align: inherit;">см. раздел « </font></font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">УКАЗАНИЕ РЕДАКЦИЙ»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> на </font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;">странице</font></a><font style="vertical-align: inherit;"> руководства
 </font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;">gitrevisions (7)</font></a><font style="vertical-align: inherit;"> для получения полного списка способов присвоения имен ревизиям. </font><font style="vertical-align: inherit;">Некоторые примеры:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show fb47ddb2 # первые несколько символов имени объекта</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    # обычно достаточно, чтобы указать его однозначно</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show HEAD ^ # родительский элемент фиксации HEAD</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show HEAD ^^ # дедушка и бабушка</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show HEAD ~ 4 # прапрапрадедушка</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Напомним, что у коммитов слияния может быть более одного родителя; </font><font style="vertical-align: inherit;">по умолчанию
 </font></font><code class="literal">^</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">~</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">следовать за первым родителем, указанным в фиксации, но вы также можете выбрать:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show HEAD ^ 1 # показать первого родителя HEAD</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show HEAD ^ 2 # показать второго родителя HEAD</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Помимо HEAD, есть еще несколько специальных имен для коммитов:</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Слияния (будут обсуждаться позже), а также операции, такие как
 </font></font><code class="literal">git reset</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, которые изменяют текущую извлеченную фиксацию, обычно устанавливают ORIG_HEAD в значение, которое HEAD имело перед текущей операцией.</font></font></p>
<p><font style="vertical-align: inherit;"></font><code class="literal">git fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Операция всегда сохраняет глава последней загруженной ветви в FETCH_HEAD. </font><font style="vertical-align: inherit;">Например, если вы запускаете </font></font><code class="literal">git fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">без указания локальной ветки в качестве цели операции</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch git: //example.com/proj.git theirbranch</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">выбранные коммиты будут по-прежнему доступны из FETCH_HEAD.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда мы обсуждаем слияние, мы также увидим специальное имя MERGE_HEAD, которое относится к другой ветке, которую мы объединяем с текущей веткой.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-rev-parse.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-rev-parse (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> - это команда низкого уровня, которая иногда бывает полезна для перевода некоторого имени фиксации в имя объекта для этой фиксации:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git rev-parse origin</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
e05db0fd4f31dde7005f075a84f96b360d05984b</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="creating-tags"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание тегов</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы также можем создать тег для ссылки на конкретную фиксацию; </font><font style="vertical-align: inherit;">после бега</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git tag стабильный-1 1b2e1d63ff</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете использовать </font></font><code class="literal">stable-1</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для ссылки на фиксацию 1b2e1d63ff.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это создает «легкий» тег. </font><font style="vertical-align: inherit;">Если вы также хотите добавить комментарий к тегу и, возможно, подписать его криптографически, вам следует вместо этого создать объект тега; </font><font style="vertical-align: inherit;">подробности см. на </font><font style="vertical-align: inherit;">странице </font><font style="vertical-align: inherit;">руководства </font></font><a class="ulink" href="git-tag.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-tag (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="browsing-revisions"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Просмотр редакций</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-log.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-log (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> может отображать списки коммитов. </font><font style="vertical-align: inherit;">Сам по себе он показывает все коммиты, доступные из родительского коммита; </font><font style="vertical-align: inherit;">но вы также можете сделать более конкретные запросы:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log v2.5 .. # фиксируется, поскольку (недоступно из) v2.5</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log test..master # фиксирует доступность от мастера, но не проверку</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log master..test # ... доступно из теста, но не из мастера</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log master ... test # ... доступный либо из теста, либо из мастера,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                        # но не оба</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log --since = "2 weeks ago" # коммитов за последние 2 недели</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log Makefile # коммиты, которые изменяют Makefile</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log fs / # ... который изменяет любой файл в fs /</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log -S'foo () '# коммиты, которые добавляют или удаляют любые данные файла</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                        # соответствие строке 'foo ()'</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">И, конечно, вы можете все это комбинировать; </font><font style="vertical-align: inherit;">следующие находки коммитов начиная с v2.5, которые касаются </font></font><code class="literal">Makefile</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или любого файла ниже </font></font><code class="literal">fs</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log v2.5 .. Makefile fs /</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете попросить git log показать патчи:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log -p</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">См. </font></font><code class="literal">--pretty</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Параметр на </font><font style="vertical-align: inherit;">странице </font><font style="vertical-align: inherit;">руководства </font></font><a class="ulink" href="git-log.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-log (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения дополнительных параметров отображения.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что журнал git начинается с самого последнего коммита и работает в обратном направлении через родителей; </font><font style="vertical-align: inherit;">однако, поскольку история Git может содержать несколько независимых линий разработки, конкретный порядок, в котором перечислены коммиты, может быть несколько произвольным.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="generating-diffs"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Генерация различий</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете генерировать различия между любыми двумя версиями, используя
 </font></font><a class="ulink" href="git-diff.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-diff (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff master..test</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это создаст разницу между кончиками двух ветвей. </font><font style="vertical-align: inherit;">Если вы предпочитаете для проверки найти разницу от их общего предка, вы можете использовать три точки вместо двух:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff master ... тест</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Иногда вместо этого вам нужен набор патчей; </font><font style="vertical-align: inherit;">для этого вы можете использовать </font></font><a class="ulink" href="git-format-patch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-format-patch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git формат-патч мастер..тест</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">создаст файл с патчем для каждой фиксации, доступной из теста, но не из мастера.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="viewing-old-file-versions"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Просмотр старых версий файлов</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы всегда можете просмотреть старую версию файла, просто проверив сначала правильную версию. </font><font style="vertical-align: inherit;">Но иногда удобнее иметь возможность просмотреть старую версию отдельного файла, ничего не проверяя; </font><font style="vertical-align: inherit;">эта команда делает следующее:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show v2.5: fs / locks.c</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перед двоеточием может быть что-нибудь, что обозначает коммит, а после него может быть любой путь к файлу, отслеживаемый Git.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="history-examples"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Примеры</font></font></h2></div></div></div>

<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="counting-commits-on-a-branch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подсчет количества коммитов на ветке</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, вы хотите узнать, сколько коммитов вы совершили с </font></font><code class="literal">mybranch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
тех пор, как они отклонились от </font></font><code class="literal">origin</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log --pretty = oneline origin..mybranch | </font><font style="vertical-align: inherit;">wc -l</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В качестве альтернативы вы можете часто видеть такие вещи, выполняемые с помощью команды нижнего уровня </font></font><a class="ulink" href="git-rev-list.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-rev-list (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , которая просто перечисляет SHA-1 всех данных коммитов:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git rev-list origin..mybranch | </font><font style="vertical-align: inherit;">wc -l</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="checking-for-equal-branches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проверьте, указывают ли две ветки на одну и ту же историю</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, вы хотите проверить, указывают ли две ветки на одну и ту же точку истории.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff origin..master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">сообщит вам, одинаково ли содержимое проекта в двух ветвях; </font><font style="vertical-align: inherit;">теоретически, однако, возможно, что одно и то же содержание проекта могло быть достигнуто двумя разными историческими путями. </font><font style="vertical-align: inherit;">Вы можете сравнить имена объектов:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git rev-list origin</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
e05db0fd4f31dde7005f075a84f96b360d05984b</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git rev-list мастер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
e05db0fd4f31dde7005f075a84f96b360d05984b</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Или вы можете вспомнить, что </font></font><code class="literal">...</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">оператор выбирает все коммиты, доступные либо по одной ссылке, либо по другой, но не по обеим; </font><font style="vertical-align: inherit;">так</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git журнал происхождения ... мастер</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не вернет никаких коммитов, когда две ветки равны.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="finding-tagged-descendants"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Найти первую версию с тегами, включая заданное исправление</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, вы знаете, что коммит e05db0fd устранил определенную проблему. </font><font style="vertical-align: inherit;">Вы хотите найти самый ранний выпуск с тегами, который содержит это исправление.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Конечно, ответов может быть несколько - если история разветвляется после коммита e05db0fd, то может быть несколько «самых ранних» помеченных релизов.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете просто визуально проверить коммиты, начиная с e05db0fd:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ gitk e05db0fd ..</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или вы можете использовать </font></font><a class="ulink" href="git-name-rev.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-name-rev (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который даст коммиту имя на основе любого тега, который он найдет, указывающего на одного из потомков коммита:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git name-rev --tags e05db0fd</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
e05db0fd теги / v1.5.0-rc1 ^ 0 ~ 23</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-describe.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-describe (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> делает обратное, называя ревизию с помощью тега, на котором основана данная фиксация:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git описать e05db0fd</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
v1.5.0-rc0-260-ge05db0f</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">но иногда это может помочь вам угадать, какие теги могут появиться после данной фиксации.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы просто хотите проверить, содержит ли данная версия с тегами заданный коммит, вы можете использовать </font></font><a class="ulink" href="git-merge-base.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-merge-base (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git merge-base e05db0fd v1.5.0-rc1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
e05db0fd4f31dde7005f075a84f96b360d05984b</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда merge-base находит общего предка данных коммитов и всегда возвращает тот или иной результат в случае, если один является потомком другого; </font><font style="vertical-align: inherit;">поэтому приведенный выше вывод показывает, что e05db0fd на самом деле является предком v1.5.0-rc1.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В качестве альтернативы обратите внимание, что</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git журнал v1.5.0-rc1..e05db0fd</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">будет производить пустой вывод тогда и только тогда, когда v1.5.0-rc1 включает e05db0fd, потому что он выводит только те коммиты, которые недоступны из v1.5.0-rc1.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В качестве еще одной альтернативы команда </font></font><a class="ulink" href="git-show-branch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show-branch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> перечисляет коммиты, доступные по ее аргументам, с отображением в левой части, которое указывает, из каких аргументов, которые коммит доступны, </font><font style="vertical-align: inherit;">Итак, если вы запустите что-то вроде</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show-branch e05db0fd v1.5.0-rc0 v1.5.0-rc1 v1.5.0-rc2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
! </font><font style="vertical-align: inherit;">[e05db0fd] Исправить предупреждения в sha1_file.c - используйте формат printf C99, если</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
доступный</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 ! </font><font style="vertical-align: inherit;">[v1.5.0-rc0] Предварительный просмотр GIT v1.5.0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  ! </font><font style="vertical-align: inherit;">[v1.5.0-rc1] GIT v1.5.0-rc1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   ! </font><font style="vertical-align: inherit;">[v1.5.0-rc2] GIT v1.5.0-rc2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">затем строка вроде</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">+ ++ [e05db0fd] Исправить предупреждения в sha1_file.c - использовать формат printf C99, если</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
доступный</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">показывает, что e05db0fd доступен из самого себя, из v1.5.0-rc1 и из v1.5.0-rc2, а не из v1.5.0-rc0.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="showing-commits-unique-to-a-branch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отображение коммитов, уникальных для данной ветки</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, вы хотите видеть все коммиты, доступные из заголовка ветки с именем, </font></font><code class="literal">master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">но не из любой другой главы в вашем репозитории.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы можем перечислить все головы в этом репозитории с помощью
 </font></font><a class="ulink" href="git-show-ref.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show-ref (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show-ref --heads</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
bf62196b5e363d73353a9dcf094c59595f3153b7 refs / Heads / core-tutorial</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
db768d5504c1bb46f63ee9d6e1772bd047e05bf9 ссылки / головы / обслуживание</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
a07157ac624b2524a059a3414e99f6f44bebc1e7 ссылки / головы / мастер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
24dbc180ea14dc1aebe09f14c8ecf32010690627 refs / Heads / tutorial-2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
1e87486ae06626c2f31eaa63d26fc0fd646c8af2 refs / Heads / tutorial-fixes</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы можем получить только имена заголовков веток и удалить их </font></font><code class="literal">master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">с помощью стандартных утилит cut и grep:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show-ref --heads | </font><font style="vertical-align: inherit;">вырезать -d '' -f2 | </font><font style="vertical-align: inherit;">grep -v '^ ссылки / головы / мастер'</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ссылки / головы / основной учебник</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ссылки / главы / обслуживание</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ссылки / главы / учебник-2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ссылки / головы / учебные исправления</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">И затем мы можем попросить увидеть все коммиты, доступные от мастера, но не от этих других голов:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ gitk master --not $ (git show-ref --heads | cut -d '' -f2 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                                grep -v '^ ссылки / головы / мастер')</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Очевидно, возможны бесконечные вариации; </font><font style="vertical-align: inherit;">например, чтобы увидеть все коммиты, доступные из некоторой головы, но не из какого-либо тега в репозитории:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ gitk $ (git show-ref --heads) --not $ (git show-ref --tags)</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(См. </font></font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Gitrevisions (7)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для объяснения синтаксиса выбора фиксации, например </font></font><code class="literal">--not</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.)</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="making-a-release"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание журнала изменений и архива для выпуска программного обеспечения</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-archive.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-archive (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> может создать tar или zip-архив из любой версии проекта; </font><font style="vertical-align: inherit;">например:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git archive -o latest.tar.gz --prefix = project / HEAD</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">будет использовать HEAD для создания сжатого tar-архива, в котором каждому имени файла предшествует </font></font><code class="literal">project/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Формат выходного файла выводится из расширения выходного файла, если это возможно, подробности см. В </font></font><a class="ulink" href="git-archive.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-archive (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Версии Git старше 1.7.7 не знают о </font></font><code class="literal">tar.gz</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">формате, вам нужно явно использовать gzip:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git archive --format = tar --prefix = project / HEAD | </font><font style="vertical-align: inherit;">gzip&gt; latest.tar.gz</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы выпускаете новую версию программного проекта, вы можете одновременно сделать журнал изменений и включить его в объявление о выпуске.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Линус Торвальдс, например, создает новые выпуски ядра, помечая их тегами, а затем выполняя:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ релиз-скрипт 2.6.12 2.6.13-rc6 2.6.13-rc7</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">где release-script - это сценарий оболочки, который выглядит так:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#! / bin / sh</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
стабильный = "$ 1"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
last = "$ 2"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
new = "3 доллара"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
echo "# git tag v $ new"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
echo "git archive --prefix = linux- $ new / v $ new | gzip -9&gt; ../linux-$new.tar.gz"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
echo "git diff v $ stable v $ new | gzip -9&gt; ../patch-$new.gz"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
echo "git log --no-merges v $ new ^ v $ last&gt; ../ChangeLog-$new"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
echo "git shortlog --no-merges v $ new ^ v $ last&gt; ../ShortLog"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
echo "git diff --stat --summary -M v $ last v $ new&gt; ../diffstat-$new"</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">а затем он просто вырезает и вставляет выходные команды, убедившись, что они выглядят нормально.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="Finding-commits-With-given-Content"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Поиск коммитов со ссылкой на файл с заданным содержимым</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Кто-то передает вам копию файла и спрашивает, какие коммиты изменили файл так, чтобы он содержал заданное содержимое до или после фиксации. </font><font style="vertical-align: inherit;">Вы можете узнать это:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log --raw --abbrev = 40 --pretty = oneline |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        grep -B 1 `git имя-хеш-объекта`</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разобраться, почему это работает, оставлено в качестве упражнения для (продвинутого) студента. </font></font><a class="ulink" href="git-log.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ГИТ-журнал (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , </font></font><a class="ulink" href="git-diff-tree.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ГИТ-Diff-дерево (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , и
 </font></font><a class="ulink" href="git-hash-object.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ГИТ-хэш-объект (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> страница человека могут оказаться полезными.</font></font></p>
</div>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="Developing-With-git"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 3. Разработка с помощью Git</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#telling-git-your-name"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Сказать Git свое имя</font></font></a></span></dt><dt><span class="section"><a href="#creating-a-new-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание нового репозитория</font></font></a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как сделать коммит</font></font></a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание хороших сообщений фиксации</font></font></a></span></dt><dt><span class="section"><a href="#ignoring-files"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Игнорирование файлов</font></font></a></span></dt><dt><span class="section"><a href="#how-to-merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как слить</font></font></a></span></dt><dt><span class="section"><a href="#resolving-a-merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разрешение слияния</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение помощи в разрешении конфликтов во время слияния</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отмена слияния</font></font></a></span></dt><dt><span class="section"><a href="#fast-forwards"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ускоренное слияние</font></font></a></span></dt><dt><span class="section"><a href="#fixing-mistakes"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибок</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибки с новым коммитом</font></font></a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибки путем переписывания истории</font></font></a></span></dt><dt><span class="section"><a href="#checkout-of-path"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение старой версии файла</font></font></a></span></dt><dt><span class="section"><a href="#interrupted-work"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Временно отложить незавершенную работу</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обеспечение хорошей производительности</font></font></a></span></dt><dt><span class="section"><a href="#ensuring-reliability"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обеспечение надежности</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проверка репозитория на наличие повреждений</font></font></a></span></dt><dt><span class="section"><a href="#recovering-lost-changes"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Восстановление утерянных изменений</font></font></a></span></dt></dl></dd></dl></div>

<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="telling-git-your-name"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Сказать Git свое имя</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Прежде чем создавать какие-либо коммиты, вам следует познакомиться с Git. </font><font style="vertical-align: inherit;">Самый простой способ сделать это - использовать </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git config --global user.name 'Ваше имя здесь'</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git config --global user.email 'you@yourdomain.example.com'</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это добавит следующее в файл с именем </font></font><code class="literal">.gitconfig</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в вашем домашнем каталоге:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">[пользователь]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        name = Ваше имя здесь</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        email = you@yourdomain.example.com</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">См. Раздел «КОНФИГУРАЦИОННЫЙ ФАЙЛ» </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения подробной информации о файле конфигурации. </font><font style="vertical-align: inherit;">Файл представляет собой обычный текст, поэтому вы также можете редактировать его в своем любимом редакторе.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="creating-a-new-repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание нового репозитория</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создать новый репозиторий с нуля очень просто:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ mkdir проект</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd project</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git init</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если у вас есть исходный контент (например, тарбол):</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ tar xzvf project.tar.gz</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd project</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git init</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git add. </font><font style="vertical-align: inherit;"># включить все ниже ./ в первую фиксацию:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="how-to-make-a-commit"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как сделать коммит</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание нового коммита состоит из трех шагов:</font></font></p>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Внесение некоторых изменений в рабочий каталог с помощью вашего любимого редактора.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Сообщаем Git о ваших изменениях.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Создание фиксации с использованием содержимого, о котором вы сообщили Git на шаге 2.
</font></font></li></ol></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">На практике вы можете чередовать и повторять шаги 1 и 2 столько раз, сколько захотите: для того, чтобы отслеживать то, что вы хотите зафиксировать на шаге 3, Git поддерживает снимок содержимого дерева в специальной промежуточной области, называемой «индекс . "</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вначале содержание индекса будет идентично содержанию HEAD. </font><font style="vertical-align: inherit;">Таким образом, команда </font></font><code class="literal">git diff --cached</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, которая показывает разницу между HEAD и индексом, в этот момент не должна выдавать никаких результатов.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изменить индекс легко:</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы обновить индекс содержимым нового или измененного файла, используйте</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git добавить путь / к / файлу</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы удалить файл из индекса и из рабочего дерева, используйте</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git rm путь / к / файлу</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После каждого шага вы можете убедиться, что</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff --cached</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">всегда показывает разницу между HEAD и индексным файлом - это то, что вы бы зафиксировали, если бы создали фиксацию сейчас - и что</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">показывает разницу между рабочим деревом и индексным файлом.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что </font></font><code class="literal">git add</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">всегда добавляет в индекс только текущее содержимое файла; </font><font style="vertical-align: inherit;">дальнейшие изменения в том же файле будут проигнорированы, если вы </font></font><code class="literal">git add</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">снова </font><font style="vertical-align: inherit;">не запустите </font><font style="vertical-align: inherit;">этот файл.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда вы будете готовы, просто бегите</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git commit</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и Git запросит сообщение о фиксации, а затем создаст новую фиксацию. </font><font style="vertical-align: inherit;">Убедитесь, что он выглядит так, как вы ожидали, с</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как специальный ярлык,</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git commit -a</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">обновит индекс любыми файлами, которые вы изменили или удалили, и создаст фиксацию за один шаг.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ряд команд полезен для отслеживания того, что вы собираетесь совершить:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff --cached # разница между HEAD и индексом; </font><font style="vertical-align: inherit;">что</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    # будет зафиксирован, если вы сейчас выполните команду "commit".</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff # разница между индексным файлом и вашим</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    # рабочий каталог; </font><font style="vertical-align: inherit;">изменения, которые не будут</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    # будет включен, если вы сейчас выполнили "commit".</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff HEAD # разница между HEAD и рабочим деревом; </font><font style="vertical-align: inherit;">что</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    # будет зафиксировано, если вы сейчас выполните "commit -a".</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git status # краткое описание вышесказанного для каждого файла.</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете использовать </font></font><a class="ulink" href="git-gui.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-gui (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для создания коммитов, просмотра изменений в индексе и файлах рабочего дерева и индивидуального выбора фрагментов различий для включения в индекс (щелкнув правой кнопкой мыши на фрагменте различий и выбрав «Stage Hunk For Фиксация ").</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="creating-good-commit-messages"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание хороших сообщений фиксации</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Хотя это и не обязательно, рекомендуется начинать сообщение о фиксации с одной короткой (менее 50 символов) строки, обобщающей изменение, за которой следует пустая строка, а затем более подробное описание. </font><font style="vertical-align: inherit;">Текст до первой пустой строки в сообщении фиксации рассматривается как заголовок фиксации, и этот заголовок используется во всем Git. </font><font style="vertical-align: inherit;">Например, </font></font><a class="ulink" href="git-format-patch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-format-patch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> превращает фиксацию в электронное письмо и использует заголовок в строке «Тема», а остальную часть фиксации в теле.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ignoring-files"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Игнорирование файлов</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В проекте часто создаются файлы, которые вы </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> хотите отслеживать с помощью Git. </font><font style="vertical-align: inherit;">Обычно это файлы, созданные в процессе сборки, или файлы временных резервных копий, созданные вашим редактором. </font><font style="vertical-align: inherit;">Конечно, </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> отслеживание файлов с Git является лишь вопросом , </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> называя </font></font><code class="literal">git add</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">их. </font><font style="vertical-align: inherit;">Но когда эти неотслеживаемые файлы валяются, это быстро раздражает; </font><font style="vertical-align: inherit;">например, они становятся
 </font></font><code class="literal">git add .</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">практически бесполезными и продолжают появляться на выходе
 </font></font><code class="literal">git status</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете указать Git игнорировать определенные файлы, создав файл, вызываемый
 </font></font><code class="literal">.gitignore</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">на верхнем уровне вашего рабочего каталога, с таким содержимым, как:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"># Строки, начинающиеся с символа "#", считаются комментариями.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Игнорировать любой файл с именем foo.txt.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
foo.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Игнорировать (сгенерированные) html файлы,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
* .html</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# кроме foo.html, который поддерживается вручную.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
! foo.html</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Игнорировать объекты и архивы.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
*. [oa]</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">См. </font></font><a class="ulink" href="gitignore.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Gitignore (5)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для подробного объяснения синтаксиса. </font><font style="vertical-align: inherit;">Вы также можете разместить файлы .gitignore в других каталогах вашего рабочего дерева, и они будут применяться к этим каталогам и их подкаталогам. </font><font style="vertical-align: inherit;">Эти </font></font><code class="literal">.gitignore</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
файлы могут быть добавлены в хранилище , </font><font style="vertical-align: inherit;">как любые другие файлы (просто идут </font></font><code class="literal">git add
.gitignore</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">git commit</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, как обычно), что удобно , </font><font style="vertical-align: inherit;">когда шаблоны исключаемых (например, шаблоны , </font><font style="vertical-align: inherit;">соответствующих выходных файлов сборки) также имеет смысл для других пользователей , </font><font style="vertical-align: inherit;">которые клонировать репозиторий.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы хотите, чтобы шаблоны исключения влияли только на определенные репозитории (вместо каждого репозитория для данного проекта), вы можете вместо этого поместить их в файл в вашем репозитории с именем </font></font><code class="literal">.git/info/exclude</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или в любой файл, указанный в </font></font><code class="literal">core.excludesFile</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">переменной конфигурации. </font><font style="vertical-align: inherit;">Некоторые команды Git также могут принимать шаблоны исключения непосредственно в командной строке. </font><font style="vertical-align: inherit;">См. Подробности в </font></font><a class="ulink" href="gitignore.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">gitignore (5)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="how-to-merge"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как слить</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете </font></font><a class="ulink" href="git-merge.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объединить</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> две расходящиеся ветви разработки с помощью
 </font><a class="ulink" href="git-merge.html" target="_top"><font style="vertical-align: inherit;">git-merge (1)</font></a><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git merge имя-ветви</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объединяет разработку в ветке </font></font><code class="literal">branchname</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">с текущей веткой.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Слияние выполняется путем объединения изменений, внесенных в </font></font><code class="literal">branchname</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">последнюю фиксацию, и изменений, внесенных до последней фиксации в вашей текущей ветке с момента разветвления их истории. </font><font style="vertical-align: inherit;">Дерево работ перезаписывается результатом слияния, если это объединение выполняется чисто, или перезаписывается полу-объединенными результатами, когда это объединение приводит к конфликтам. </font><font style="vertical-align: inherit;">Следовательно, если у вас есть незафиксированные изменения, касающиеся тех же файлов, что и те, на которые повлияло слияние, Git откажется продолжить. </font><font style="vertical-align: inherit;">В большинстве случаев вы захотите зафиксировать свои изменения перед слиянием, а если вы этого не сделаете, тогда </font></font><a class="ulink" href="git-stash.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-stash (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> может удалить эти изменения, пока вы выполняете слияние, и повторно применить их после.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если изменения достаточно независимы, Git автоматически завершит слияние и зафиксирует результат (или повторно использует существующую фиксацию в случае </font></font><a class="link" href="#fast-forwards" title="Ускоренное слияние"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">быстрой перемотки вперед</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , см. Ниже). </font><font style="vertical-align: inherit;">С другой стороны, если есть конфликты - например, если один и тот же файл изменен двумя разными способами в удаленной и локальной ветвях, - вы будете предупреждены; </font><font style="vertical-align: inherit;">вывод может выглядеть примерно так:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git слияние далее</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 Готово на 100% (4/4)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Автоматически объединенный файл .txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
КОНФЛИКТ (содержимое): конфликт слияния в file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Ошибка автоматического слияния; </font><font style="vertical-align: inherit;">исправить конфликты и зафиксировать результат.</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Маркеры конфликтов остаются в проблемных файлах, и после того, как вы разрешите конфликты вручную, вы можете обновить индекс, добавив его содержимое и запустить Git commit, как обычно при создании нового файла.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы изучите полученный коммит с помощью gitk, вы увидите, что у него есть два родителя, один из которых указывает на вершину текущей ветки, а другой - на вершину другой ветви.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="resolving-a-merge"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разрешение слияния</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда слияние не разрешается автоматически, Git оставляет индекс и рабочее дерево в особом состоянии, которое дает вам всю информацию, необходимую для разрешения слияния.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Файлы с конфликтами специально помечаются в индексе, поэтому, пока вы не решите проблему и не обновите индекс, </font></font><a class="ulink" href="git-commit.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-commit (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> завершится ошибкой:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git commit</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
file.txt: требуется слияние</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Кроме того, </font></font><a class="ulink" href="git-status.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-status (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> перечислит эти файлы как «не объединенные», а к файлам с конфликтами будут добавлены маркеры конфликтов, например:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">&lt;&lt;&lt;&lt;&lt;&lt;&lt; ЗАГОЛОВОК: file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Привет мир</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
=======</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Прощай</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
&gt;&gt;&gt;&gt;&gt;&gt;&gt; 77976da35a11db4580b80ae27e8d65caf5208086: file.txt</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Все, что вам нужно сделать, это отредактировать файлы для разрешения конфликтов, а затем</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git add file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что сообщение фиксации уже будет заполнено для вас некоторой информацией о слиянии. </font><font style="vertical-align: inherit;">Обычно вы можете просто использовать это сообщение по умолчанию без изменений, но при желании можете добавить свой собственный комментарий.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вышесказанное - это все, что вам нужно знать, чтобы разрешить простое слияние. </font><font style="vertical-align: inherit;">Но Git также предоставляет дополнительную информацию для разрешения конфликтов:</font></font></p>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="conflict-resolution"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение помощи в разрешении конфликтов во время слияния</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Все изменения, которые Git смог объединить автоматически, уже добавлены в индексный файл, поэтому </font></font><a class="ulink" href="git-diff.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-diff (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> показывает только конфликты. </font><font style="vertical-align: inherit;">Он использует необычный синтаксис:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
diff --cc file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
индекс 802992c, 2b60207..0000000</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
--- a / file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+++ b / file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
@@@ -1,1 -1,1 +1,5 @@@</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
++ &lt;&lt;&lt;&lt;&lt;&lt;&lt; ЗАГОЛОВОК: file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 + Привет, мир</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
++ =======</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ До свидания</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
++ &gt;&gt;&gt;&gt;&gt;&gt;&gt; 77976da35a11db4580b80ae27e8d65caf5208086: file.txt</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Напомним, что коммит, который будет зафиксирован после разрешения этого конфликта, будет иметь двух родителей вместо обычного: один родитель будет HEAD, вершиной текущей ветки; </font><font style="vertical-align: inherit;">другой будет концом другой ветви, которая временно хранится в MERGE_HEAD.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Во время слияния индекс содержит три версии каждого файла. </font><font style="vertical-align: inherit;">Каждая из этих трех «файловых стадий» представляет разные версии файла:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show: 1: file.txt # файл в общем предке обеих веток</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show: 2: file.txt # версия из HEAD.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show: 3: file.txt # версия из MERGE_HEAD.</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда вы запрашиваете </font></font><a class="ulink" href="git-diff.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-diff (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы показать конфликты, он запускает трехстороннее различие между конфликтующими результатами слияния в рабочем дереве с этапами 2 и 3, чтобы показать только блоки, содержимое которых поступает с обеих сторон, смешанное (в других Другими словами, когда результаты слияния блока поступают только на этапе 2, эта часть не является конфликтующей и не отображается (то же самое для этапа 3).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Приведенная выше разница показывает различия между версией файла file.txt в виде рабочего дерева и версиями стадии 2 и стадии 3. </font><font style="vertical-align: inherit;">Таким образом, вместо того, чтобы предшествовать каждой строке одним </font></font><code class="literal">+</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или </font></font><code class="literal">-</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, теперь используются два столбца: первый столбец используется для различий между первым родительским элементом и копией рабочего каталога, а второй - для различий между вторым родительским элементом и копией рабочего каталога. </font><font style="vertical-align: inherit;">(См. Раздел «КОМБИНИРОВАННЫЙ РАЗЛИЧНЫЙ ФОРМАТ» в </font></font><a class="ulink" href="git-diff-files.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-diff-files (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения подробной информации о формате.)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После разрешения конфликта очевидным образом (но до обновления индекса) разница будет выглядеть так:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
diff --cc file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
индекс 802992c, 2b60207..0000000</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
--- a / file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+++ b / file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
@@@ -1,1 -1,1 +1,1 @@@</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
- Привет мир</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 -Прощай</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
++ Прощай, мир</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это показывает, что наша разрешенная версия удалила «Hello world» из первого родителя, удалила «Goodbye» из второго родителя и добавила «Goodbye world», который ранее отсутствовал в обоих.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Некоторые специальные параметры сравнения позволяют отличать рабочий каталог от любого из этих этапов:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff -1 file.txt # diff для этапа 1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff --base file.txt # то же, что и выше</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff -2 file.txt # diff для этапа 2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff --ours file.txt # то же, что и выше</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff -3 file.txt # diff для этапа 3</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff --theirs file.txt # то же, что и выше.</font></font></pre>
<p><font style="vertical-align: inherit;"></font><a class="ulink" href="git-log.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ГИТ-журнал (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и </font></font><a class="ulink" href="gitk.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">gitk (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> команды также предоставляют специальную помощь для слияний:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log --merge</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ gitk --merge</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Они будут отображать все коммиты, которые существуют только в HEAD или MERGE_HEAD, и которые касаются не объединенного файла.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете использовать </font></font><a class="ulink" href="git-mergetool.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-mergetool (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который позволяет вам объединять не объединенные файлы с помощью внешних инструментов, таких как Emacs или kdiff3.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Каждый раз, когда вы разрешаете конфликты в файле и обновляете индекс:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git add file.txt</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">различные этапы этого файла будут «свернуты», после чего
 </font></font><code class="literal">git diff</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(по умолчанию) больше не будут отображать различия для этого файла.</font></font></p>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="undoing-a-merge"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отмена слияния</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы застряли и решили просто сдаться и выбросить весь беспорядок, вы всегда можете вернуться в состояние до слияния с помощью</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git merge --abort</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Или, если вы уже совершили слияние, которое хотите выбросить,</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git reset --hard ORIG_HEAD</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако эта последняя команда может быть опасной в некоторых случаях - никогда не выбрасывайте уже совершенную фиксацию, если эта фиксация могла быть слита с другой веткой, так как это может запутать дальнейшие слияния.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fast-forwards"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ускоренное слияние</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Есть один особый случай, не упомянутый выше, который рассматривается по-другому. </font><font style="vertical-align: inherit;">Обычно слияние приводит к фиксации слияния с двумя родительскими элементами, по одному на каждую из двух линий разработки, которые были объединены.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако, если текущая ветвь является предком другой - так что каждый коммит, присутствующий в текущей ветке, уже содержится в другой ветке - тогда Git просто выполняет «перемотку вперед»; </font><font style="vertical-align: inherit;">заголовок текущей ветки перемещается вперед, чтобы указать на заголовок объединенной ветки, без создания каких-либо новых коммитов.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fixing-mistakes"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибок</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы испортили рабочее дерево, но еще не совершили ошибку, вы можете вернуть все рабочее дерево в последнее зафиксированное состояние с помощью</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git restore --staged --worktree: /</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы совершаете фиксацию, которую позже пожалели, что не делали этого, есть два принципиально разных способа решить проблему:</font></font></p>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Вы можете создать новую фиксацию, которая отменяет все, что было сделано старой фиксацией. </font><font style="vertical-align: inherit;">Это правильно, если о вашей ошибке уже сообщали.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Вы можете вернуться и изменить старую фиксацию. </font><font style="vertical-align: inherit;">Вы никогда не должны этого делать, если вы уже обнародовали историю; </font><font style="vertical-align: inherit;">Git обычно не ожидает изменения «истории» проекта и не может правильно выполнять повторные слияния из ветки, история которой была изменена.
</font></font></li></ol></div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="reverting-a-commit"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибки с новым коммитом</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создать новую фиксацию, которая отменяет более раннее изменение, очень просто; </font><font style="vertical-align: inherit;">просто передайте команде </font></font><a class="ulink" href="git-revert.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-revert (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ссылку на плохую фиксацию; </font><font style="vertical-align: inherit;">например, чтобы отменить самую последнюю фиксацию:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git revert HEAD</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это создаст новую фиксацию, которая отменяет изменение в HEAD. </font><font style="vertical-align: inherit;">Вам будет предоставлена ​​возможность отредактировать сообщение фиксации для новой фиксации.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете отменить более раннее изменение, например предпоследнее:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git revert HEAD ^</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В этом случае Git попытается отменить старое изменение, оставив нетронутыми все изменения, сделанные с тех пор. </font><font style="vertical-align: inherit;">Если более поздние изменения совпадают с изменениями, которые необходимо отменить, вам будет предложено исправить конфликты вручную, как и в случае </font></font><a class="link" href="#resolving-a-merge" title="Разрешение слияния"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">разрешения слияния</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="fixing-a-mistake-by-rewriting-history"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исправление ошибки путем переписывания истории</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если проблемная фиксация является самой последней фиксацией, и вы еще не сделали эту фиксацию общедоступной, вы можете просто
 </font></font><a class="link" href="#undoing-a-merge" title="Отмена слияния"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">уничтожить ее, используя</font></font><code class="literal">git reset</code></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В качестве альтернативы вы можете отредактировать рабочий каталог и обновить индекс, чтобы исправить свою ошибку, как если бы вы собирались </font></font><a class="link" href="#how-to-make-a-commit" title="Как сделать коммит"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">создать новую фиксацию</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , а затем запустить</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git commit --amend</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">который заменит старую фиксацию новой фиксацией, включающей ваши изменения, давая вам возможность сначала отредактировать старое сообщение фиксации.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Опять же, вы никогда не должны делать это с коммитом, который, возможно, уже был объединен с другой веткой; </font><font style="vertical-align: inherit;">в этом случае используйте </font></font><a class="ulink" href="git-revert.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-revert (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Также можно заменить коммиты на более ранний этап истории, но это сложная тема, которую следует оставить для
 </font></font><a class="link" href="#cleaning-up-history" title="Глава 5. Перезапись истории и поддержание серии патчей"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">другой главы</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="checkout-of-path"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение старой версии файла</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В процессе отмены предыдущего плохого изменения вам может быть полезно проверить старую версию определенного файла с помощью
 </font></font><a class="ulink" href="git-restore.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-restore (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Команда</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git restore --source = HEAD ^ путь / к / файлу</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">заменяет путь / к / файлу содержимым, которое он имел в фиксации HEAD ^, а также обновляет индекс для соответствия. </font><font style="vertical-align: inherit;">Он не меняет ветки.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы просто хотите просмотреть старую версию файла, не изменяя рабочий каталог, вы можете сделать это с помощью
 </font></font><a class="ulink" href="git-show.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show HEAD ^: путь / к / файлу</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">который отобразит данную версию файла.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="interrupted-work"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Временно отложить незавершенную работу</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Пока вы работаете над чем-то сложным, вы обнаруживаете несвязанную, но очевидную и тривиальную ошибку. </font><font style="vertical-align: inherit;">Прежде чем продолжить, вы хотите исправить это. </font><font style="vertical-align: inherit;">Вы можете использовать </font></font><a class="ulink" href="git-stash.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-stash (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы сохранить текущее состояние вашей работы, и после исправления ошибки (или, при желании, после того, как сделаете это в другой ветке и затем вернетесь), открепите незавершенные изменения.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git stash push -m "работа над функцией foo"</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Эта команда сохранит ваши изменения в </font></font><code class="literal">stash</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">папке и сбросит рабочее дерево и индекс в соответствии с кончиком вашей текущей ветки. </font><font style="vertical-align: inherit;">Затем вы можете исправить это как обычно.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">... редактировать и тестировать ...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit -a -m "blorpl: typofix"</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После этого вы можете вернуться к тому, над чем вы работали
 </font></font><code class="literal">git stash pop</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git stash pop</font></font></pre>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ensuring-good-performance"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обеспечение хорошей производительности</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В больших репозиториях Git зависит от сжатия, чтобы информация истории не занимала слишком много места на диске или в памяти. </font><font style="vertical-align: inherit;">Некоторые команды Git могут автоматически запускать </font></font><a class="ulink" href="git-gc.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-gc (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , поэтому вам не нужно беспокоиться о его запуске вручную. </font><font style="vertical-align: inherit;">Однако сжатие большого репозитория может занять некоторое время, поэтому вы можете вызвать </font></font><code class="literal">gc</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">явный </font><font style="vertical-align: inherit;">вызов, </font><font style="vertical-align: inherit;">чтобы избежать автоматического сжатия, когда это неудобно.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ensuring-reliability"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обеспечение надежности</font></font></h2></div></div></div>

<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="checking-for-corruption"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проверка репозитория на наличие повреждений</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-fsck.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fsck (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> выполняет ряд проверок самосогласованности репозитория и сообщает о любых проблемах. </font><font style="vertical-align: inherit;">Это может занять некоторое время.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fsck</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
болтающаяся фиксация 7281251ddd2a61e38657c827739c57015671a6b3</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
болтающаяся фиксация 2706a059f258c6b245f298dc4ff2ccd30ec21a63</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
висячая фиксация 13472b7c4b80851a1bc551779171dcb03655e9b5</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
свисающая капля 218761f9d90712d37a9c5e36f406f92202db07eb</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
болтающаяся фиксация bf093535a34a4d35731aa2bd90fe6b176302f14f</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
болтающаяся фиксация 8e4bec7f2ddaa268bef999853c25755452100f8e</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
висящее дерево d50bb86186bf27b681d25af89d3b5b68382e4085</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Свисающее дерево b24c2473f1fd3d91352a624795be026d64c8841f</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы увидите информационные сообщения о висящих объектах. </font><font style="vertical-align: inherit;">Это объекты, которые все еще существуют в репозитории, но на которые больше не ссылается ни одна из ваших веток, и могут (и будут) через некоторое время удалены с помощью </font></font><code class="literal">gc</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Вы можете запустить, </font></font><code class="literal">git fsck --no-dangling</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">чтобы подавить эти сообщения, и по-прежнему просматривать реальные ошибки.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="recovering-lost-changes"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Восстановление утерянных изменений</font></font></h3></div></div></div>

<div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="reflogs"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Рефлоги</font></font></h4></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Допустим, вы изменяете ветку с помощью </font></font><a class="link" href="#fixing-mistakes" title="Исправление ошибок"><code class="literal">git reset --hard</code></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, а затем понимаете, что ветка была единственной ссылкой на этот момент в истории.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">К счастью, Git также ведет журнал, называемый «reflog», всех предыдущих значений каждой ветви. </font><font style="vertical-align: inherit;">Так что в этом случае вы все равно можете найти старую историю, например, используя</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log master @ {1}</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Здесь перечислены коммиты, доступные из предыдущей версии заголовка
 </font></font><code class="literal">master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки. </font><font style="vertical-align: inherit;">Этот синтаксис можно использовать с любой командой Git, которая принимает фиксацию, а не только с </font></font><code class="literal">git log</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Еще несколько примеров:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show master @ {2} # Посмотрите, куда указывает ветвь 2,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show master @ {3} # 3, ... изменено назад.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ gitk master @ {вчера} # Посмотрите, куда он указывал вчера,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ gitk master @ {"1 week ago"} # ... или на прошлой неделе</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log --walk-reflogs master # показывать записи журнала для мастера</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для HEAD ведется отдельный рефлог, поэтому</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show HEAD @ {"1 неделю назад"}</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">покажет то, на что HEAD указывал неделю назад, а не то, что текущая ветвь указывала неделю назад. </font><font style="vertical-align: inherit;">Это позволяет вам видеть историю того, что вы проверяли.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Рефлоги по умолчанию хранятся в течение 30 дней, после чего их можно удалить. </font><font style="vertical-align: inherit;">См. </font></font><a class="ulink" href="git-reflog.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git-reflog (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и </font></font><a class="ulink" href="git-gc.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-gc (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы узнать, как управлять этим сокращением, и см. Раздел « </font></font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">УКАЗАНИЕ</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ИЗМЕНЕНИЙ» в </font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;">gitrevisions (7)</font></a><font style="vertical-align: inherit;"> для подробностей.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что история рефлогов сильно отличается от обычной истории Git. </font><font style="vertical-align: inherit;">Хотя обычная история является общей для каждого репозитория, работающего над одним и тем же проектом, история рефлогов не используется совместно: она сообщает вам только о том, как ветви в вашем локальном репозитории менялись с течением времени.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="dangling-object-recovery"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Осмотр висящих предметов</font></font></h4></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В некоторых ситуациях рефлог не может вас спасти. </font><font style="vertical-align: inherit;">Например, предположим, что вы удаляете ветку, а затем понимаете, что вам нужна содержащаяся в ней история. </font><font style="vertical-align: inherit;">Также удаляется рефлог; </font><font style="vertical-align: inherit;">однако, если вы еще не удалили репозиторий, вы все равно сможете найти потерянные коммиты в висящих объектах, о которых </font></font><code class="literal">git fsck</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">сообщается. </font><font style="vertical-align: inherit;">См. Подробности
 </font></font><a class="xref" href="#dangling-objects" title="Болтающиеся предметы"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в разделе «Висячие предметы»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fsck</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
болтающаяся фиксация 7281251ddd2a61e38657c827739c57015671a6b3</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
болтающаяся фиксация 2706a059f258c6b245f298dc4ff2ccd30ec21a63</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
висячая фиксация 13472b7c4b80851a1bc551779171dcb03655e9b5</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете изучить один из этих болтающихся коммитов, например,</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ gitk 7281251ddd --not --all</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">который делает то, на что это похоже: он говорит, что вы хотите видеть историю фиксации, которая описана висящими фиксациями, но не историю, которая описывается всеми вашими существующими ветвями и тегами. </font><font style="vertical-align: inherit;">Таким образом, вы получаете именно ту историю, которую можно получить из потерянного коммита. </font><font style="vertical-align: inherit;">(И обратите внимание, что это может быть не просто одна фиксация: мы сообщаем только о «кончике линии» как о том, что она болтается, но может быть целая глубокая и сложная история фиксации, которая была отброшена.)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы решите, что хотите вернуть историю, вы всегда можете создать новую ссылку, указывающую на нее, например, новую ветку:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git branch восстановленная ветка 7281251ddd</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Также возможны другие типы висячих объектов (капли и деревья), и в других ситуациях могут возникать висячие объекты.</font></font></p>
</div>
</div>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="sharing-development"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 4. Совместное использование разработки с другими</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#getting-updates-With-git-pull"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение обновлений с помощью git pull</font></font></a></span></dt><dt><span class="section"><a href="#submitting-patches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отправка патчей в проект</font></font></a></span></dt><dt><span class="section"><a href="#importing-patches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Импорт патчей в проект</font></font></a></span></dt><dt><span class="section"><a href="#public-repositories"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Публичные репозитории Git</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка публичного репозитория</font></font></a></span></dt><dt><span class="section"><a href="#exporting-via-git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Экспорт репозитория Git по протоколу Git</font></font></a></span></dt><dt><span class="section"><a href="#exporting-via-http"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Экспорт репозитория git через HTTP</font></font></a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отправка изменений в публичный репозиторий</font></font></a></span></dt><dt><span class="section"><a href="#forcing-push"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Что делать, если пуш не работает</font></font></a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка общего репозитория</font></font></a></span></dt><dt><span class="section"><a href="#setting-up-gitweb"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разрешение просмотра репозитория в Интернете</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#how-to-get-a-git-repository-with-minimal-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как получить репозиторий Git с минимальной историей</font></font></a></span></dt><dt><span class="section"><a href="#sharing-development-examples"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Примеры</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ведение тематических веток для сопровождающего подсистемы Linux</font></font></a></span></dt></dl></dd></dl></div>

<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="getting-updates-With-git-pull"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение обновлений с помощью git pull</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После того как вы клонируете репозиторий и зафиксируете несколько собственных изменений, вы можете проверить исходный репозиторий на наличие обновлений и объединить их в свою собственную работу.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы уже видели, </font></font><a class="link" href="#Updating-a-repository-With-git-fetch" title="Обновление репозитория с помощью git fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">как обновлять ветки удаленного отслеживания</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> с помощью </font></font><a class="ulink" href="git-fetch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fetch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и как объединить две ветки. </font><font style="vertical-align: inherit;">Таким образом, вы можете объединить изменения из основной ветки исходного репозитория с помощью:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git merge origin / master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако команда </font></font><a class="ulink" href="git-pull.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-pull (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> позволяет сделать это за один шаг:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git pull origin master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Фактически, если вы </font></font><code class="literal">master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">выполнили регистрацию, то эта ветвь была настроена </font></font><code class="literal">git clone</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для получения изменений из ветки HEAD исходного репозитория. </font><font style="vertical-align: inherit;">Очень часто вы можете выполнить вышеперечисленное с помощью простого</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git pull</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Эта команда получит изменения из удаленных веток в ваши ветки удаленного отслеживания </font></font><code class="literal">origin/*</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и объединит ветвь по умолчанию с текущей веткой.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В более общем смысле, ветвь, созданная из ветки удаленного отслеживания, по умолчанию будет вытягиваться из этой ветки. </font><font style="vertical-align: inherit;">См. Описание параметров
 </font></font><code class="literal">branch.&lt;name&gt;.remote</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">branch.&lt;name&gt;.merge</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в
 </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и обсуждение </font></font><code class="literal">--track</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">параметра в
 </font></font><a class="ulink" href="git-checkout.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-checkout (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , чтобы узнать, как управлять этими значениями по умолчанию.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Помимо сохранения нажатий клавиш, он </font></font><code class="literal">git pull</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">также помогает вам, создавая сообщение фиксации по умолчанию, документирующее ветку и репозиторий, из которых вы извлекли.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(Но обратите внимание, что такая фиксация не будет создана в случае
 </font></font><a class="link" href="#fast-forwards" title="Ускоренное слияние"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">быстрой перемотки вперед</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ; вместо этого ваша ветка будет просто обновлена, чтобы указывать на последнюю фиксацию из восходящей ветки.)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><code class="literal">git pull</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">также может быть указана </font></font><code class="literal">.</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">как «удаленный» репозиторий, и в этом случае она просто сливается с веткой из текущего репозитория; </font><font style="vertical-align: inherit;">так что команды</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git pull. </font><font style="vertical-align: inherit;">ветвь</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ветка слияния $ git</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">примерно эквивалентны.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="submitting-patches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отправка патчей в проект</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если у вас всего несколько изменений, самый простой способ отправить их - отправить их в виде исправлений по электронной почте:</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Сначала используйте </font></font><a class="ulink" href="git-format-patch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-format-patch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ; </font><font style="vertical-align: inherit;">например:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Источник $ git format-patch</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">создаст пронумерованную серию файлов в текущем каталоге, по одному для каждого патча в текущей ветке, но не в </font></font><code class="literal">origin/HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><code class="literal">git format-patch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">может включать начальное «сопроводительное письмо». </font><font style="vertical-align: inherit;">Вы можете вставить комментарий к отдельным патчам после трех пунктирных линий, которые
 </font></font><code class="literal">format-patch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ставятся после сообщения о фиксации, но перед самим патчем. </font><font style="vertical-align: inherit;">Если вы используете </font></font><code class="literal">git notes</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для отслеживания материала сопроводительного письма, вы
 </font></font><code class="literal">git format-patch --notes</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">будете включать примечания к фиксации аналогичным образом.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Затем вы можете импортировать их в свой почтовый клиент и отправлять вручную. </font><font style="vertical-align: inherit;">Однако, если вам нужно сразу много отправить, вы можете предпочесть </font><font style="vertical-align: inherit;">сценарий </font></font><a class="ulink" href="git-send-email.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-send-email (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для автоматизации процесса. </font><font style="vertical-align: inherit;">Сначала обратитесь к списку рассылки вашего проекта, чтобы определить их требования к отправке исправлений.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="importing-patches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Импорт патчей в проект</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git также предоставляет инструмент под названием </font></font><a class="ulink" href="git-am.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-am (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> (am означает «применить почтовый ящик») для импорта такой серии исправлений, отправленных по электронной почте. </font><font style="vertical-align: inherit;">Просто сохраните все сообщения, содержащие патч, по порядку, в один файл почтового ящика, скажем </font></font><code class="literal">patches.mbox</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, затем запустите</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git am -3 patches.mbox</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git применяет каждый патч по порядку; </font><font style="vertical-align: inherit;">если будут обнаружены какие-либо конфликты, он остановится, и вы сможете исправить конфликты, как описано в разделе « </font></font><a class="link" href="#resolving-a-merge" title="Разрешение слияния"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разрешение слияния</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ». </font><font style="vertical-align: inherit;">(Эта </font></font><code class="literal">-3</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">опция указывает Git выполнить слияние; если вы предпочитаете просто прервать работу и оставить дерево и индекс нетронутыми, вы можете опустить эту опцию.)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После обновления индекса результатами разрешения конфликта вместо создания нового коммита просто запустите</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git am - продолжить</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и Git создаст для вас фиксацию и продолжит применять оставшиеся исправления из почтового ящика.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Конечным результатом будет серия коммитов, по одной для каждого патча в исходном почтовом ящике, причем авторство и сообщение журнала фиксации взяты из сообщения, содержащего каждый патч.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="public-repositories"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Публичные репозитории Git</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Другой способ отправить изменения в проект - сказать сопровождающему этого проекта, чтобы он извлек изменения из вашего репозитория с помощью
 </font></font><a class="ulink" href="git-pull.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-pull (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">В разделе « </font></font><a class="link" href="#getting-updates-With-git-pull" title="Получение обновлений с помощью git pull"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение обновлений с помощью</font></font><code class="literal">git pull</code></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> » мы описали это как способ получения обновлений из «основного» репозитория, но он также работает и в другом направлении.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если у вас и у сопровождающего есть учетные записи на одном компьютере, вы можете просто получать изменения напрямую из репозиториев друг друга; </font><font style="vertical-align: inherit;">Команды, которые принимают URL-адреса репозитория в качестве аргументов, также принимают имя локального каталога:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git clone / путь / к / репозиторию</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git pull / путь / к / другому / репозиторию</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или ssh URL:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git clone ssh: // ваш хост / ~ вы / репозиторий</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для проектов с небольшим количеством разработчиков или для синхронизации нескольких частных репозиториев это может быть все, что вам нужно.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако более распространенный способ сделать это - поддерживать отдельный общедоступный репозиторий (обычно на другом хосте), из которого другие могут получать изменения. </font><font style="vertical-align: inherit;">Обычно это более удобно и позволяет четко отделить частную незавершенную работу от общедоступной.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы будете продолжать выполнять свою повседневную работу в своем личном репозитории, но периодически «проталкивать» изменения из вашего личного репозитория в публичный репозиторий, позволяя другим разработчикам извлекать из этого репозитория. </font><font style="vertical-align: inherit;">Таким образом, поток изменений в ситуации, когда есть еще один разработчик с общедоступным репозиторием, выглядит следующим образом:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">                      ты толкаешь</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ваше личное репо ------------------&gt; ваше публичное репо</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      ^ |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      | </font><font style="vertical-align: inherit;">тянешь | </font><font style="vertical-align: inherit;">они тянут</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      | </font><font style="vertical-align: inherit;">они нажимают V</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
их публичное репо &lt;------------------- их репо</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы объясним, как это сделать, в следующих разделах.</font></font></p>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="setting-up-a-public-repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка публичного репозитория</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, ваш личный репозиторий находится в каталоге </font></font><code class="literal">~/proj</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Сначала мы создаем новый клон репозитория и сообщаем, </font></font><code class="literal">git daemon</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">что он должен быть публичным:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git clone --bare ~ / proj proj.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ touch proj.git / git-daemon-export-ok</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Результирующий каталог proj.git содержит «чистый» репозиторий git - это просто содержимое </font></font><code class="literal">.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каталога без каких-либо извлеченных файлов вокруг него.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Затем скопируйте </font></font><code class="literal">proj.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">на сервер, на котором вы планируете разместить общедоступный репозиторий. </font><font style="vertical-align: inherit;">Вы можете использовать scp, rsync или что угодно, что вам удобнее.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="exporting-via-git"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Экспорт репозитория Git по протоколу Git</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это предпочтительный метод.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если кто-то другой администрирует сервер, он должен сообщить вам, в какой каталог поместить репозиторий и по какому </font></font><code class="literal">git://</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">URL-адресу он будет отображаться. </font><font style="vertical-align: inherit;">Затем вы можете перейти к разделу « </font></font><a class="link" href="#pushing-changes-to-a-public-repository" title="Отправка изменений в публичный репозиторий"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Размещение изменений в публичном репозитории</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> » ниже.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В противном случае все, что вам нужно сделать, это запустить </font></font><a class="ulink" href="git-daemon.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-daemon (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ; </font><font style="vertical-align: inherit;">он будет прослушивать порт 9418. По умолчанию он разрешает доступ к любому каталогу, который выглядит как каталог Git и содержит волшебный файл git-daemon-export-ok. </font><font style="vertical-align: inherit;">Передача некоторых путей к каталогам в качестве </font></font><code class="literal">git daemon</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
аргументов еще больше ограничит экспорт этими путями.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете работать </font></font><code class="literal">git daemon</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">как inetd-сервис; </font><font style="vertical-align: inherit;">подробности см. на </font><font style="vertical-align: inherit;">странице </font><font style="vertical-align: inherit;">руководства
 </font></font><a class="ulink" href="git-daemon.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-daemon (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">(См. Особенно раздел примеров.)</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="exporting-via-http"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Экспорт репозитория git через HTTP</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Протокол Git обеспечивает лучшую производительность и надежность, но на хосте с настроенным веб-сервером экспорт HTTP может быть проще настроить.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Все, что вам нужно сделать, это поместить только что созданный голый репозиторий Git в каталог, который экспортируется веб-сервером, и внести некоторые изменения, чтобы предоставить веб-клиентам дополнительную информацию, которая им нужна:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ mv proj.git /home/you/public_html/proj.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd proj.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git --bare update-server-info</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
крючки $ mv / post-update.sample hooks / post-update</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(Объяснение последних двух строк см. В
 </font></font><a class="ulink" href="git-update-server-info.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-update-server-info (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и </font></font><a class="ulink" href="githooks.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">githooks (5)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Рекламируйте URL-адрес </font></font><code class="literal">proj.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Кто-то другой должен иметь возможность клонировать или извлекать из этого URL, например, с помощью командной строки, например:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git clone http://yourserver.com/~you/proj.git</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(См. Также
 </font></font><a class="ulink" href="howto/setup-git-server-over-http.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">setup-git-server-over-http</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
для чуть более сложной настройки с использованием WebDAV, который также позволяет передавать данные через HTTP.)</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="pushing-changes-to-a-public-repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отправка изменений в публичный репозиторий</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что два описанных выше метода (экспорт через
 </font></font><a class="link" href="#exporting-via-http" title="Экспорт репозитория git через HTTP"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">http</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или </font></font><a class="link" href="#exporting-via-git" title="Экспорт репозитория Git по протоколу Git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ) позволяют другим разработчикам получать ваши последние изменения, но они не разрешают доступ на запись, что вам необходимо для обновления общедоступного репозитория с последними изменениями, созданными в вашем частном репозитории.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Самый простой способ сделать это - использовать </font></font><a class="ulink" href="git-push.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-push (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и ssh; </font><font style="vertical-align: inherit;">чтобы обновить удаленную ветку с именем </font></font><code class="literal">master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">последнего состояния вашей ветки </font></font><code class="literal">master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, запустите</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push ssh: //yourserver.com/~you/proj.git master: master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или просто</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push ssh: //yourserver.com/~you/proj.git master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как и в случае </font></font><code class="literal">git fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, </font></font><code class="literal">git push</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">будет жаловаться, если это не приведет к
 </font></font><a class="link" href="#fast-forwards" title="Ускоренное слияние"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">перемотке вперед</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ; </font><font style="vertical-align: inherit;">см. следующий раздел для получения подробной информации о работе с этим случаем.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что целью a </font></font><code class="literal">push</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">обычно является
 </font></font><a class="link" href="#def_bare_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">пустой</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> репозиторий. </font><font style="vertical-align: inherit;">Вы также можете отправить в репозиторий, в котором есть извлеченное рабочее дерево, но принудительное обновление текущей извлеченной ветви по умолчанию запрещено, чтобы избежать путаницы. </font><font style="vertical-align: inherit;">Подробнее см. Описание параметра receive.denyCurrentBranch в </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как и в случае </font></font><code class="literal">git fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, вы также можете настроить параметры конфигурации, чтобы не вводить текст; </font><font style="vertical-align: inherit;">так, например:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git remote add public-repo ssh: //yourserver.com/~you/proj.git</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">добавляет следующее к </font></font><code class="literal">.git/config</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">[удаленное "публичное репо"]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        url = yourserver.com:proj.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        выборка = + ссылки / головы / *: ссылки / удаленные / пример / *</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">что позволяет делать то же самое, просто</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push мастер публичного репо</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подробнее см. Объяснения параметров </font></font><code class="literal">remote.&lt;name&gt;.url</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">,
 </font></font><code class="literal">branch.&lt;name&gt;.remote</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">remote.&lt;name&gt;.push</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в
 </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="forcing-push"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Что делать, если пуш не работает</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если push не приведет к </font></font><a class="link" href="#fast-forwards" title="Ускоренное слияние"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">быстрой перемотке</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> удаленной ветки </font><a class="link" href="#fast-forwards" title="Ускоренное слияние"><font style="vertical-align: inherit;">вперед</font></a><font style="vertical-align: inherit;"> , то произойдет сбой с такой ошибкой, как:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">! </font><font style="vertical-align: inherit;">[отклонено] главный -&gt; главный (без перемотки вперед)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ошибка: не удалось отправить некоторые ссылки в '...'</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Подсказка: обновления были отклонены, потому что верхушка вашей текущей ветки позади</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
подсказка: его удаленный аналог. </font><font style="vertical-align: inherit;">Интегрируйте удаленные изменения (например,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
подсказка: 'git pull ...') перед повторным нажатием.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Подсказка: подробности см. в «Примечании о быстрой перемотке вперед» в «git push --help».</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это может произойти, например, если вы:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
используйте </font></font><code class="literal">git reset --hard</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для удаления уже опубликованных коммитов, или
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
использовать </font></font><code class="literal">git commit --amend</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для замены уже опубликованных коммитов (как в </font></font><a class="xref" href="#fixing-a-mistake-by-rewriting-history" title="Исправление ошибки путем переписывания истории"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">разделе «Исправление ошибки путем перезаписи истории»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ) или
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
используйте </font></font><code class="literal">git rebase</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для перебазирования любых уже опубликованных коммитов (как в </font></font><a class="xref" href="#using-git-rebase" title="Обновление серии патчей с помощью git rebase"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">разделе «Обновление серии патчей с помощью git rebase»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ).
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете принудительно </font></font><code class="literal">git push</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">выполнить обновление в любом случае, поставив перед именем ветки знак плюса:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push ssh: //yourserver.com/~you/proj.git + master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание на добавление </font></font><code class="literal">+</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">знака. </font><font style="vertical-align: inherit;">В качестве альтернативы вы можете использовать
 </font></font><code class="literal">-f</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">флаг для принудительного удаленного обновления, как в:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push -f ssh: //yourserver.com/~you/proj.git master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обычно всякий раз, когда изменяется заголовок ветки в общедоступном репозитории, он изменяется, чтобы указать на потомка коммита, на который он указывал ранее. </font><font style="vertical-align: inherit;">Форсируя толчок в этой ситуации, вы нарушаете это соглашение. </font><font style="vertical-align: inherit;">(См. </font></font><a class="xref" href="#problems-With-rewriting-history" title="Проблемы с перезаписью истории"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Раздел «Проблемы с перезаписью истории»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Тем не менее, это обычная практика для людей, которым нужен простой способ публикации серии незавершенных патчей, и это приемлемый компромисс, если вы предупреждаете других разработчиков о том, что именно так вы собираетесь управлять веткой.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Также возможен сбой принудительной отправки, когда другие люди имеют право на отправку в тот же репозиторий. </font><font style="vertical-align: inherit;">В этом случае правильное решение - повторить отправку после первого обновления вашей работы: либо путем извлечения, либо путем выборки с последующей перебазированием; </font><font style="vertical-align: inherit;">см.
 </font></font><a class="link" href="#setting-up-a-shared-repository" title="Настройка общего репозитория"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">следующий раздел</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и
 </font></font><a class="ulink" href="gitcvs-migration.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">gitcvs-migration (7)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения дополнительной информации.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="setting-up-a-shared-repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка общего репозитория</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Другой способ сотрудничества - использование модели, аналогичной той, что обычно используется в CVS, где несколько разработчиков со специальными правами все загружают и извлекают из одного общего репозитория. </font><font style="vertical-align: inherit;">См.
 </font></font><a class="ulink" href="gitcvs-migration.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Gitcvs-migration (7),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы узнать, как это настроить.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако, хотя в поддержке Git общих репозиториев нет ничего плохого, этот режим работы обычно не рекомендуется просто потому, что режим сотрудничества, который поддерживает Git - путем обмена исправлениями и извлечения из общедоступных репозиториев - имеет множество преимуществ перед центральный общий репозиторий:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Возможность Git быстро импортировать и объединять исправления позволяет одному специалисту по сопровождению обрабатывать входящие изменения даже с очень высокой скоростью. </font><font style="vertical-align: inherit;">А когда этого становится слишком много, обслуживающему </font></font><code class="literal">git pull</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">персоналу предоставляется простой способ делегировать эту работу другим сопровождающим, при этом позволяя дополнительно просматривать входящие изменения.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Поскольку репозиторий каждого разработчика имеет одну и ту же полную копию истории проекта, ни один репозиторий не является особенным, и для другого разработчика тривиально взять на себя обслуживание проекта либо по взаимному соглашению, либо потому, что сопровождающий перестает отвечать на запросы или с ним трудно работать. .
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Отсутствие центральной группы «коммиттеров» означает, что меньше необходимости в официальных решениях о том, кто «внутри», а кто «нет».
</font></font></li></ul></div>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="setting-up-gitweb"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разрешение просмотра репозитория в Интернете</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Скрипт gitweb cgi предоставляет пользователям простой способ просматривать редакции вашего проекта, содержимое файлов и журналы без установки Git. </font><font style="vertical-align: inherit;">При желании могут быть включены такие функции, как каналы RSS / Atom и сведения об авторстве / аннотации.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-instaweb.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-instaweb (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> предоставляет простой способ начать просмотр репозитория с помощью gitweb. </font><font style="vertical-align: inherit;">Сервер по умолчанию при использовании instaweb - lighttpd.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">См. Файл gitweb / INSTALL в дереве исходных кодов Git и
 </font></font><a class="ulink" href="gitweb.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">gitweb (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения инструкций по настройке постоянной установки с сервером с поддержкой CGI или Perl.</font></font></p>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="how-to-get-a-git-repository-with-minimal-history"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как получить репозиторий Git с минимальной историей</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"></font><a class="link" href="#def_shallow_clone"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мелкий клон</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , с его усеченной историей, полезно , </font><font style="vertical-align: inherit;">когда один заинтересован только в новейшей истории проекта и получить полную историю от вверх по </font><font style="vertical-align: inherit;">течению стоит дорого.</font></font></p>
<p><font style="vertical-align: inherit;"></font><a class="link" href="#def_shallow_clone"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Клон неглубоко</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> создается путем указания </font></font><a class="ulink" href="git-clone.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ГИТ-клона (1)</font></font></a> <code class="literal">--depth</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> переключателя. </font><font style="vertical-align: inherit;">Позднее глубину можно изменить с помощью </font><font style="vertical-align: inherit;">переключателя </font></font><a class="ulink" href="git-fetch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fetch (1)</font></font></a> <code class="literal">--depth</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или восстановить полную историю с помощью </font></font><code class="literal">--unshallow</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Слияние внутри </font></font><a class="link" href="#def_shallow_clone"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">мелкого клона</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> будет работать, пока база слияния находится в недавней истории. </font><font style="vertical-align: inherit;">В противном случае это будет похоже на слияние несвязанных историй и может привести к огромным конфликтам. </font><font style="vertical-align: inherit;">Это ограничение может сделать такой репозиторий непригодным для использования в рабочих процессах на основе слияния.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sharing-development-examples"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Примеры</font></font></h2></div></div></div>

<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="maintaining-topic-branches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ведение тематических веток для сопровождающего подсистемы Linux</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это описывает, как Тони Лак использует Git в своей роли разработчика архитектуры IA64 для ядра Linux.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Он использует две публичные ветви:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
«Тестовое» дерево, в которое изначально помещаются патчи, чтобы они могли получить некоторое представление при интеграции с другими текущими разработками. </font><font style="vertical-align: inherit;">Эндрю может втягивать это дерево в -mm, когда хочет.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Дерево «релизов», в которое перемещаются проверенные патчи для окончательной проверки работоспособности и в качестве средства для их отправки Линусу (отправив ему запрос «пожалуйста, извлеките»).
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Он также использует набор временных веток («тематических ветвей»), каждая из которых содержит логическую группу исправлений.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы настроить это, сначала создайте свое рабочее дерево, клонировав публичное дерево Линуса:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git работа</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd работа</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Дерево Линуса будет храниться в ветке удаленного отслеживания с именем origin / master и может быть обновлено с помощью </font></font><a class="ulink" href="git-fetch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fetch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ; </font><font style="vertical-align: inherit;">вы можете отслеживать другие общедоступные деревья, используя </font></font><a class="ulink" href="git-remote.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-remote (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для настройки «удаленного» и
 </font></font><a class="ulink" href="git-fetch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fetch (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы поддерживать их в актуальном состоянии; </font><font style="vertical-align: inherit;">см.
 </font></font><a class="xref" href="#repositories-and-branches" title="Глава 1. Репозитории и филиалы"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Главу 1, </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Репозитории и ветви</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Теперь создайте ветки, в которых вы собираетесь работать; </font><font style="vertical-align: inherit;">они начинаются с текущего конца ветки origin / master и должны быть настроены (с использованием </font></font><code class="literal">--track</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">параметра </font></font><a class="ulink" href="git-branch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-branch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ) для слияния изменений из Linus по умолчанию.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git branch --track test origin / master</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch --track release origin / master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Их можно легко обновлять с помощью </font></font><a class="ulink" href="git-pull.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-pull (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch test &amp;&amp; git pull</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git switch release &amp;&amp; git pull</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Важная заметка! </font><font style="vertical-align: inherit;">Если у вас есть какие-либо локальные изменения в этих ветвях, то это слияние создаст объект фиксации в истории (без локальных изменений Git просто выполнит слияние с перемоткой вперед). </font><font style="vertical-align: inherit;">Многим людям не нравится «шум», который это создает в истории Linux, поэтому вам следует избегать делать это в </font></font><code class="literal">release</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветке </font><font style="vertical-align: inherit;">по </font><font style="vertical-align: inherit;">прихоти, так как эти шумные коммиты станут частью постоянной истории, когда вы попросите Линуса вытащить из ветки выпуска.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Несколько переменных конфигурации (см. </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ) могут упростить отправку обеих ветвей в ваше общедоступное дерево. </font><font style="vertical-align: inherit;">(См.
 </font></font><a class="xref" href="#setting-up-a-public-repository" title="Настройка публичного репозитория"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Раздел «Настройка публичного репозитория»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .)</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ cat &gt;&gt; .git / config &lt;&lt; EOF</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[удаленное "mytree"]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        url = master.kernel.org:/pub/scm/linux/kernel/git/aegl/linux.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        push = отпустить</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        push = тест</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
EOF</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Затем вы можете нажать как тестовое, так и освободить деревья с помощью
 </font></font><a class="ulink" href="git-push.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-push (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push mytree</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или нажмите только одну из веток test и release, используя:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push mytree test</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push mytree релиз</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Теперь применим патчи от сообщества. </font><font style="vertical-align: inherit;">Подумайте о коротком и быстром названии ветки, которая будет содержать этот патч (или связанную группу патчей), и создайте новую ветку из недавнего стабильного тега ветки Линуса. </font><font style="vertical-align: inherit;">Выбор стабильной базы для вашей ветки: 1) поможет вам: избегая включения несвязанных и, возможно, слегка протестированных изменений 2) поможет будущим охотникам за ошибками, которые используют </font></font><code class="literal">git bisect</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для поиска проблем</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch -c ускорение-спинлоки v2.6.35</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Теперь вы применяете исправления, запускаете несколько тестов и фиксируете изменения. </font><font style="vertical-align: inherit;">Если патч представляет собой серию, состоящую из нескольких частей, вы должны применять каждый как отдельный коммит к этой ветке.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ ... patch ... test ... commit [... patch ... test ... фиксация] *</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда вы довольны состоянием этого изменения, вы можете объединить его в ветку "test", чтобы сделать его общедоступным:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch test &amp;&amp; git merge speed-up-spinlocks</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Маловероятно, что у вас возникнут какие-либо конфликты здесь ... но они могут быть, если вы потратите некоторое время на этот шаг и также загрузите новые версии из апстрима.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Спустя некоторое время, когда пройдет достаточно времени и будет завершено тестирование, вы можете вытянуть ту же ветку в </font></font><code class="literal">release</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дерево, готовое к работе. </font><font style="vertical-align: inherit;">Здесь вы видите ценность сохранения каждого патча (или серии патчей) в отдельной ветке. </font><font style="vertical-align: inherit;">Это означает, что патчи можно перемещать в </font></font><code class="literal">release</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дерево в любом порядке.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch release &amp;&amp; git merge speed-up-spinlocks</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Через некоторое время у вас будет несколько веток, и, несмотря на хорошо выбранные имена, которые вы выбрали для каждой из них, вы можете забыть, для чего они нужны или в каком статусе они находятся. Чтобы получить напоминание о том, какие изменения есть в конкретная ветка, используйте:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log linux..branchname | </font><font style="vertical-align: inherit;">git shortlog</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы узнать, был ли он уже объединен с ветвью тестирования или выпуска, используйте:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log test..branchname</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log release..branchname</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(Если эта ветка еще не была объединена, вы увидите некоторые записи журнала. Если она была объединена, то вывода не будет.)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После того, как патч завершает большой цикл (переход от теста к выпуску, затем вытаскивается Линусом и, наконец, возвращается в вашу локальную
 </font></font><code class="literal">origin/master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветку), ветвь для этого изменения больше не нужна. </font><font style="vertical-align: inherit;">Вы обнаруживаете это, когда вывод:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log origin..branchname</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">пусто. </font><font style="vertical-align: inherit;">На этом этапе ветку можно удалить:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git branch -d имя ветки</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Некоторые изменения настолько тривиальны, что нет необходимости создавать отдельную ветку, а затем объединять ее в каждую из веток тестирования и выпуска. </font><font style="vertical-align: inherit;">Для этих изменений просто примените непосредственно к </font></font><code class="literal">release</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветке, а затем объедините это с </font></font><code class="literal">test</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">веткой.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После отправки своей работы </font></font><code class="literal">mytree</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вы можете использовать
 </font></font><a class="ulink" href="git-request-pull.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-request-pull (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы подготовить сообщение с запросом «вытащите» для отправки Линусу:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push mytree</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git request-pull origin выпуск mytree</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вот несколько скриптов, которые еще больше упрощают все это.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">==== скрипт обновления ====</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Обновить ветку в моем дереве Git. </font><font style="vertical-align: inherit;">Если ветку обновлять</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# - происхождение, затем извлечь с kernel.org. </font><font style="vertical-align: inherit;">В противном случае слить</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# origin / master ветка в test | release ветку</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
case "$ 1" в</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
тест | выпуск)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        git checkout $ 1 &amp;&amp; git pull. </font><font style="vertical-align: inherit;">происхождение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
происхождение)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        before = $ (git rev-parse refs / remotes / origin / master)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        git fetch origin</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        после = $ (git rev-parse refs / remotes / origin / master)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        если [$ до! = $ после]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        тогда</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                git log $ before .. $ after | </font><font style="vertical-align: inherit;">git shortlog</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        фи</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
*)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        echo "использование: $ 0 origin | test | release" 1&gt; &amp; 2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        выход 1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
esac</font></font></pre>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">==== скрипт слияния ====</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Объединить ветку в тестовую или релизную ветку</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
pname = $ 0</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Применение()</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
{</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        echo "использование: $ pname branch test | release" 1&gt; &amp; 2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        выход 1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
git show-ref -q --verify - refs / Heads / "$ 1" || </font><font style="vertical-align: inherit;">{</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        echo "Не вижу ветку &lt;$ 1&gt;" 1&gt; и 2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        Применение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
case "$ 2" в</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
тест | выпуск)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        если [$ (git log $ 2 .. $ 1 | wc -c) -eq 0]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        тогда</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                echo $ 1 уже объединен с $ 2 1&gt; &amp; 2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                выход 1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        фи</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        git checkout $ 2 &amp;&amp; git pull. </font><font style="vertical-align: inherit;">1 доллар</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
*)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        Применение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
esac</font></font></pre>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">==== статусный скрипт ====</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# отчет о состоянии моего дерева Git ia64</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
gb = $ (tput setab 2)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
rb = $ (tput setab 1)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
восстановить = $ (tput setab 9)</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
if [`git rev-list test..release | </font><font style="vertical-align: inherit;">wc -c` -gt 0]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
тогда</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        echo $ rb Предупреждение: в выпуске совершаются коммиты, которые не находятся в тестовом $ restore</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        git log test..release</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
фи</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
для ветки в `git show-ref --heads | </font><font style="vertical-align: inherit;">sed 's | ^. * / ||' `</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
делать</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        если [$ branch = test -o $ branch = release]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        тогда</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                Продолжать</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        фи</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        echo -n $ gb ======= $ ветка ====== $ restore ""</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        статус =</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        для ссылки в тестовом выпуске origin / master</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        делать</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                if [`git rev-list $ ref .. $ branch | </font><font style="vertical-align: inherit;">wc -c` -gt 0]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                тогда</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                        status = $ status $ {ref: 0: 1}</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                фи</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        сделанный</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        case $ status in</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        trl)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                echo $ rb Нужно запустить test $ restore</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        rl)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                эхо "В тесте"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        l)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                эхо "В ожидании линуса"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        "")</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                echo $ rb Все готово $ restore</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        *)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                echo $ rb "&lt;$ status&gt;" $ restore</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                ;;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        esac</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        git log origin / master .. $ branch | </font><font style="vertical-align: inherit;">git shortlog</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
сделанный</font></font></pre>
</div>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="cleaning-up-history"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 5. Перезапись истории и поддержание серии патчей</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#patch-series"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание идеальной серии патчей</font></font></a></span></dt><dt><span class="section"><a href="#using-git-rebase"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обновление серии патчей с помощью git rebase</font></font></a></span></dt><dt><span class="section"><a href="#rewriting-one-commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перезапись одного коммита</font></font></a></span></dt><dt><span class="section"><a href="#reordering-patch-series"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изменение порядка следования или выбор из серии патчей</font></font></a></span></dt><dt><span class="section"><a href="#interactive-rebase"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Использование интерактивных перемещений</font></font></a></span></dt><dt><span class="section"><a href="#patch-series-tools"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Прочие инструменты</font></font></a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проблемы с перезаписью истории</font></font></a></span></dt><dt><span class="section"><a href="#bisect-merges"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Почему разделение коммитов слияния пополам может быть сложнее, чем разделение пополам линейной истории</font></font></a></span></dt></dl></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обычно коммиты только добавляются в проект, никогда не удаляются и не заменяются. </font><font style="vertical-align: inherit;">Git разработан с учетом этого предположения, и его нарушение приведет к тому, что механизм слияния Git (например) сделает неправильные вещи.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако есть ситуация, в которой может быть полезно нарушить это предположение.</font></font></p>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="patch-series"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание идеальной серии патчей</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, вы участвуете в большом проекте и хотите добавить сложную функцию и представить ее другим разработчикам таким образом, чтобы им было проще прочитать ваши изменения, проверить их правильность и понять, почему вы вносили каждое изменение.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы представите все свои изменения как один патч (или коммит), они могут обнаружить, что это слишком много, чтобы переварить все сразу.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы представите им всю историю своей работы с ошибками, исправлениями и тупиками, они могут быть ошеломлены.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Таким образом, в идеале обычно создается серия патчей, которая:</font></font></p>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Каждый патч можно применять по порядку.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Каждый патч включает в себя одно логическое изменение вместе с сообщением, объясняющим это изменение.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Никакой патч не приводит к регрессу: после применения любой начальной части серии получившийся проект по-прежнему компилируется и работает и не содержит ошибок, которых не было раньше.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Полная серия дает тот же конечный результат, что и ваш собственный (возможно, гораздо более запутанный!) Процесс разработки.
</font></font></li></ol></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы представим некоторые инструменты, которые могут помочь вам в этом, объясним, как их использовать, а затем объясним некоторые проблемы, которые могут возникнуть из-за того, что вы переписываете историю.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="using-git-rebase"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обновление серии патчей с помощью git rebase</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, что вы создаете ветку в ветке </font></font><code class="literal">mywork</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">удаленного отслеживания
 </font></font><code class="literal">origin</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и создаете несколько коммитов поверх нее:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch -c источник моей работы</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ vi file.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ vi otherfile.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы не выполняли слияния с моей работой, так что это просто простая линейная последовательность патчей поверх </font></font><code class="literal">origin</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> o - o - O &lt;- происхождение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         а - б - в &lt;- моя работа</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Еще несколько интересных работ были проделаны в восходящем проекте и
 </font></font><code class="literal">origin</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">продвинулись вперед:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> o - o - O - o - o - o &lt;- происхождение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         а - б - в &lt;- моя работа</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">На этом этапе вы можете использовать </font></font><code class="literal">pull</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для слияния ваших изменений обратно; </font><font style="vertical-align: inherit;">в результате будет создан новый коммит слияния, например:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> o - o - O - o - o - o &lt;- происхождение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        \ \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         а - б - в - м &lt;- моя работа</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако, если вы предпочитаете, чтобы история в моей работе представляла собой простую серию коммитов без каких-либо слияний, вы можете вместо этого использовать
 </font></font><a class="ulink" href="git-rebase.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-rebase (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git переключить мою работу</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git rebase origin</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это удалит все ваши коммиты из моей работы, временно сохранит их как патчи (в указанном каталоге </font></font><code class="literal">.git/rebase-apply</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">), обновит mywork, чтобы указать на последнюю версию источника, а затем применит каждый из сохраненных патчей к новой моей работе. </font><font style="vertical-align: inherit;">Результат будет выглядеть так:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> o - o - O - o - o - o &lt;- происхождение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                 \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                  а '- б' - в '&lt;- моя работа</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В процессе могут обнаруживаться конфликты. </font><font style="vertical-align: inherit;">В этом случае он остановится и позволит вам исправить конфликты; </font><font style="vertical-align: inherit;">после устранения конфликтов используйте </font></font><code class="literal">git add</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
для обновления индекса этим содержимым, а затем вместо запуска </font></font><code class="literal">git commit</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">просто запустите</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git rebase - продолжить</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и Git продолжит применять остальные исправления.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В любой момент вы можете использовать </font></font><code class="literal">--abort</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">опцию, чтобы прервать этот процесс и вернуть мою работу в состояние, которое было до того, как вы начали перебазирование:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git rebase --abort</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вам нужно изменить порядок или отредактировать несколько коммитов в ветке, это может быть проще в использовании </font></font><code class="literal">git rebase -i</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, что позволяет вам переупорядочивать и сжимать коммиты, а также отмечать их для индивидуального редактирования во время перебазирования. </font><font style="vertical-align: inherit;">См. Подробности </font></font><a class="xref" href="#interactive-rebase" title="Использование интерактивных перемещений"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в разделе «Использование интерактивных перебазировок»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и
 </font><font style="vertical-align: inherit;">альтернативных вариантах </font></font><a class="xref" href="#reordering-patch-series" title="Изменение порядка следования или выбор из серии патчей"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в разделе «Изменение порядка или выбор из серии исправлений»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="rewriting-one-commit"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перезапись одного коммита</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В </font></font><a class="xref" href="#fixing-a-mistake-by-rewriting-history" title="Исправление ошибки путем переписывания истории"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">разделе «Исправление ошибки путем перезаписи истории»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> мы видели, </font><font style="vertical-align: inherit;">что вы можете заменить самую последнюю фиксацию, используя</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git commit --amend</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">который заменит старую фиксацию новой фиксацией, включающей ваши изменения, давая вам возможность сначала отредактировать старое сообщение фиксации. </font><font style="vertical-align: inherit;">Это полезно для исправления опечаток в вашем последнем коммите или для корректировки содержимого патча плохо организованного коммита.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вам нужно изменить коммиты более глубоко в вашей истории, вы можете использовать </font><a class="link" href="#interactive-rebase" title="Использование интерактивных перемещений"><font style="vertical-align: inherit;">инструкцию </font></a></font><a class="link" href="#interactive-rebase" title="Использование интерактивных перемещений"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">интерактивного перебазирования</font></font><code class="literal">edit</code><font style="vertical-align: inherit;"></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="reordering-patch-series"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изменение порядка следования или выбор из серии патчей</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Иногда вы хотите отредактировать коммит глубже в своей истории. </font><font style="vertical-align: inherit;">Один из подходов состоит в том, чтобы использовать </font></font><code class="literal">git format-patch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для создания серии патчей, а затем сбросить состояние до состояния до патчей:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Источник $ git format-patch</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git reset --hard origin</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Затем измените, переупорядочите или удалите патчи по мере необходимости, прежде чем применять их снова с помощью </font></font><a class="ulink" href="git-am.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-am (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git am * .patch</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="interactive-rebase"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Использование интерактивных перемещений</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете редактировать серию патчей с помощью интерактивной перебазировки. </font><font style="vertical-align: inherit;">Это то же самое, что и </font></font><a class="link" href="#reordering-patch-series" title="Изменение порядка следования или выбор из серии патчей"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">изменение порядка использования серии патчей
</font></font><code class="literal">format-patch</code></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , поэтому используйте тот интерфейс, который вам больше нравится.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Восстановите текущую HEAD на последней фиксации, которую вы хотите сохранить как есть. </font><font style="vertical-align: inherit;">Например, если вы хотите изменить порядок последних 5 коммитов, используйте:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git rebase -i HEAD ~ 5</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это откроет ваш редактор со списком шагов, которые необходимо предпринять для выполнения вашей перебазировки.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">выбрать deadbee Единственная линия этого коммита</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
pick fa1afe1 Линия следующего коммита</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Rebase c0ffeee..deadbee на c0ffeee</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
#</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Команды:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# p, pick = использовать фиксацию</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# r, reword = использовать фиксацию, но отредактировать сообщение фиксации</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# e, edit = использовать фиксацию, но не вносить поправки</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# s, squash = использовать фиксацию, но сливается с предыдущей фиксацией</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# f, fixup = как "squash", но удалить сообщение журнала этой фиксации</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# x, exec = run команда (остальная часть строки) с использованием оболочки</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
#</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Эти строки можно переупорядочить; </font><font style="vertical-align: inherit;">они выполняются сверху вниз.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
#</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Если вы удалите здесь строчку, ЧТО COMMIT БУДЕТ УТЕРЯНЫ.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
#</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Однако, если вы удалите все, перебазирование будет прервано.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
#</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
# Обратите внимание, что пустые коммиты закомментированы</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как объясняется в комментариях, вы можете переупорядочивать коммиты, объединять их, редактировать сообщения коммитов и т.д., редактируя список. </font><font style="vertical-align: inherit;">Как только вы будете удовлетворены, сохраните список и закройте редактор, и начнется перебазирование.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перебазирование будет остановлено там, где </font></font><code class="literal">pick</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">оно было заменено на </font></font><code class="literal">edit</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или когда шаг в списке не может механически разрешить конфликты и требует вашей помощи. </font><font style="vertical-align: inherit;">Когда вы закончите редактирование и / или разрешение конфликтов, вы можете продолжить </font></font><code class="literal">git rebase --continue</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Если вы решите, что дела идут слишком непросто, вы всегда можете спастись </font></font><code class="literal">git rebase
--abort</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Даже после завершения перебазирования вы все равно можете восстановить исходную ветвь с помощью </font></font><a class="link" href="#reflogs" title="Рефлоги"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">reflog</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для более подробного обсуждения процедуры и дополнительных советов см. Раздел «ИНТЕРАКТИВНЫЙ РЕЖИМ» в </font></font><a class="ulink" href="git-rebase.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-rebase (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="patch-series-tools"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Прочие инструменты</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Существует множество других инструментов, таких как StGit, которые существуют для поддержки серии исправлений. </font><font style="vertical-align: inherit;">Это выходит за рамки данного руководства.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="problems-With-rewriting-history"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проблемы с перезаписью истории</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Основная проблема с переписыванием истории ветки связана со слиянием. </font><font style="vertical-align: inherit;">Предположим, кто-то получает вашу ветку и объединяет ее со своей веткой, в результате чего получается что-то вроде этого:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> o - o - O - o - o - o &lt;- происхождение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        \ \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         t - t - t - m &lt;- их ветвь:</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Затем предположим, что вы изменили последние три коммита:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">         o - o - o &lt;- новый глава происхождения</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        /</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 o - o - O - o - o - o &lt;- старая глава происхождения</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если мы изучим всю эту историю вместе в одном репозитории, это будет выглядеть так:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">         o - o - o &lt;- новый глава происхождения</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        /</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 o - o - O - o - o - o &lt;- старая глава происхождения</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        \ \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         t - t - t - m &lt;- их ветвь:</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git не имеет возможности узнать, что новая голова является обновленной версией старой головы; </font><font style="vertical-align: inherit;">он обрабатывает эту ситуацию точно так же, как если бы два разработчика независимо друг от друга выполняли работу над старой и новой головками параллельно. </font><font style="vertical-align: inherit;">На этом этапе, если кто-то попытается объединить новую голову в свою ветку, Git попытается объединить две (старую и новую) линии разработки, вместо того, чтобы пытаться заменить старую новой. </font><font style="vertical-align: inherit;">Результаты могут быть неожиданными.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы по-прежнему можете публиковать ветки, история которых переписана, и другим может быть полезно получить эти ветки, чтобы исследовать или протестировать их, но им не следует пытаться втягивать такие ветки в свою собственную работу.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для истинно распределенной разработки, поддерживающей правильное слияние, опубликованные ветки никогда не следует переписывать.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bisect-merges"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Почему разделение коммитов слияния пополам может быть сложнее, чем разделение пополам линейной истории</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-bisect.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-bisect (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> правильно обрабатывает историю, которая включает коммиты слияния. </font><font style="vertical-align: inherit;">Однако, когда обнаруженная фиксация является фиксацией слияния, пользователю может потребоваться усерднее, чем обычно, чтобы выяснить, почему эта фиксация привела к проблеме.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Представьте себе эту историю:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">      --- Z --- o --- X ---...--- o --- A --- C --- D</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
          \ /</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
           о --- о --- Д ---...--- о --- Б</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, что на верхней линии разработки значение одной из функций, существующих в Z, изменяется при фиксации X. Коммиты из Z, ведущие к A, изменяют как реализацию функции, так и все вызывающие сайты, существующие в Z, а также они добавляют новые сайты для звонков, чтобы быть последовательными. </font><font style="vertical-align: inherit;">В A нет ошибки.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, что тем временем на нижней линии разработки кто-то добавляет новый вызывающий сайт для этой функции в коммите Y. Все коммиты от Z, ведущие к B, предполагают старую семантику этой функции, а вызывающие и вызываемые абоненты согласованы друг с другом. . </font><font style="vertical-align: inherit;">В B тоже нет ошибки.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим далее, что две линии разработки полностью сливаются в C, поэтому разрешение конфликтов не требуется.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Тем не менее, код на C не работает, потому что вызывающие объекты, добавленные на нижней строке разработки, не были преобразованы в новую семантику, введенную на верхней строке разработки. </font><font style="vertical-align: inherit;">Итак, если все, что вы знаете, это то, что D - это плохо, что Z - это хорошо, и что
 </font></font><a class="ulink" href="git-bisect.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-bisect (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> идентифицирует C как виновника, как вы поймете, что проблема связана с этим изменением семантики?</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда результатом </font></font><code class="literal">git bisect</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксации является фиксация без слияния, вы обычно можете обнаружить проблему, изучив только эту фиксацию. </font><font style="vertical-align: inherit;">Разработчики могут упростить это, разбив свои изменения на небольшие автономные коммиты. </font><font style="vertical-align: inherit;">Однако в приведенном выше случае это не поможет, потому что проблема не очевидна при изучении любого отдельного коммита; </font><font style="vertical-align: inherit;">вместо этого требуется глобальный взгляд на развитие. </font><font style="vertical-align: inherit;">Что еще хуже, изменение семантики проблемной функции может быть лишь небольшой частью изменений в верхней строке разработки.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">С другой стороны, если бы вместо слияния в C вы перебазировали историю с Z на B поверх A, вы бы получили эту линейную историю:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    --- Z --- o --- X --...--- o --- A --- o --- o --- Y * --...--- o --- Б * - Д *</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разделение пополам между Z и D * поразило бы единственного виновника фиксации Y *, и понять, почему Y * был нарушен, вероятно, было бы легче.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Отчасти по этой причине многие опытные пользователи Git, даже когда они работают над проектами, в которых часто бывает много слияния, сохраняют линейность истории, перенастраивая ее на последнюю исходную версию перед публикацией.</font></font></p>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="advanced-branch-management"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 6. Расширенное управление филиалами</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#fetching-individual-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение отдельных веток</font></font></a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git fetch и перемотка вперед</font></font></a></span></dt><dt><span class="section"><a href="#forcing-fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Принуждение git fetch к обновлению без перемотки вперед</font></font></a></span></dt><dt><span class="section"><a href="#remote-branch-configuration"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка веток удаленного отслеживания</font></font></a></span></dt></dl></div>

<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fetching-individual-branches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получение отдельных веток</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вместо использования </font></font><a class="ulink" href="git-remote.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-remote (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> вы также можете обновить только одну ветку за раз и сохранить ее локально под произвольным именем:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch origin todo: my-todo-work</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Первый аргумент </font></font><code class="literal">origin</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">,, просто указывает Git выполнить выборку из репозитория, из которого вы изначально клонировали. </font><font style="vertical-align: inherit;">Второй аргумент указывает Git получить указанную ветку </font></font><code class="literal">todo</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">из удаленного репозитория и сохранить ее локально под этим именем </font></font><code class="literal">refs/heads/my-todo-work</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также можете получать ветки из других репозиториев; </font><font style="vertical-align: inherit;">так</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch git: //example.com/proj.git master: example-master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">создаст новую ветку с именем </font></font><code class="literal">example-master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и сохранит в ней ветку с именем </font></font><code class="literal">master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">из репозитория по заданному URL. </font><font style="vertical-align: inherit;">Если у вас уже есть ветка с именем example-master, она попытается выполнить
 </font></font><a class="link" href="#fast-forwards" title="Ускоренное слияние"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">быструю перемотку</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> к фиксации, заданной основной веткой example.com. </font><font style="vertical-align: inherit;">Подробнее:</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fetch-fast-forwards"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git fetch и перемотка вперед</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В предыдущем примере при обновлении существующей ветки </font></font><code class="literal">git fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
проверяется, что самая последняя фиксация в удаленной ветке является потомком самой последней фиксации в вашей копии ветки перед обновлением вашей копии ветки, чтобы она указывала на новую. совершить. </font><font style="vertical-align: inherit;">Git называет этот процесс </font></font><a class="link" href="#fast-forwards" title="Ускоренное слияние"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">перемоткой вперед</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перемотка вперед выглядит примерно так:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> о - о - о - о &lt;- старый руководитель филиала</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
           \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
            o - o - o &lt;- новый руководитель филиала</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В некоторых случаях возможно, что новая голова </font></font><span class="strong"><strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не</font></font></strong></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> будет потомком старой головы. </font><font style="vertical-align: inherit;">Например, разработчик мог понять, что допустил серьезную ошибку, и решил отступить, что привело к такой ситуации:</font></font></p>
<pre class="literallayout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> o - o - o - o - a - b &lt;- старый руководитель филиала</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
           \</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
            o - o - o &lt;- новый руководитель филиала</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В этом случае </font></font><code class="literal">git fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">произойдет сбой, и будет выведено предупреждение.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В этом случае вы все равно можете принудительно обновить Git до нового заголовка, как описано в следующем разделе. </font><font style="vertical-align: inherit;">Однако обратите внимание, что в приведенной выше ситуации это может означать потерю коммитов с меткой </font></font><code class="literal">a</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">b</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, если вы еще не создали собственную ссылку, указывающую на них.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="forcing-fetch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Принуждение git fetch к обновлению без перемотки вперед</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если git fetch завершился неудачно, потому что новый заголовок ветки не является потомком старого, вы можете принудительно выполнить обновление с помощью:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch git: //example.com/proj.git + master: refs / remotes / example / master</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание на добавление </font></font><code class="literal">+</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">знака. </font><font style="vertical-align: inherit;">В качестве альтернативы вы можете использовать </font></font><code class="literal">-f</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
флаг для принудительного обновления всех выбранных ветвей, как в:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch -f origin</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Помните, что коммиты, на которые указывает старая версия example / master, могут быть потеряны, как мы видели в предыдущем разделе.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="remote-branch-configuration"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Настройка веток удаленного отслеживания</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Выше мы видели, что </font></font><code class="literal">origin</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">это просто ярлык для ссылки на репозиторий, из которого вы изначально клонировали. </font><font style="vertical-align: inherit;">Эта информация хранится в переменных конфигурации Git, которые вы можете увидеть с помощью
 </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git config -l</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
core.repositoryformatversion = 0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
core.filemode = true</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
core.logallrefupdates = правда</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
remote.origin.url = git: //git.kernel.org/pub/scm/git/git.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
remote.origin.fetch = + ссылки / головы / *: ссылки / удаленные / происхождение / *</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
branch.master.remote = origin</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
branch.master.merge = ссылки / главы / мастер</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если есть другие репозитории, которые вы также часто используете, вы можете создать аналогичные параметры конфигурации, чтобы не печатать; </font><font style="vertical-align: inherit;">например,</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Пример удаленного добавления $ git git: //example.com/proj.git</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">добавляет следующее к </font></font><code class="literal">.git/config</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">[удаленный "пример"]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        url = git: //example.com/proj.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        выборка = + ссылки / головы / *: ссылки / удаленные / пример / *</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Также обратите внимание, что указанная выше конфигурация может быть выполнена путем прямого редактирования файла </font></font><code class="literal">.git/config</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вместо использования </font></font><a class="ulink" href="git-remote.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-remote (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После настройки пульта следующие три команды будут делать то же самое:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch git: //example.com/proj.git + refs / Heads / *: refs / remotes / example / *</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Пример $ git fetch + refs / Heads / *: refs / remotes / example / *</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Пример $ git fetch</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">См. </font></font><a class="ulink" href="git-config.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git-config (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения дополнительных сведений о параметрах конфигурации, упомянутых выше, и </font></font><a class="ulink" href="git-fetch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fetch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения дополнительных сведений о синтаксисе refspec.</font></font></p>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="git-concepts"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 7. Концепции Git</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#the-object-database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">База данных объектов</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект фиксации</font></font></a></span></dt><dt><span class="section"><a href="#tree-object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект дерева</font></font></a></span></dt><dt><span class="section"><a href="#blob-object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект Blob</font></font></a></span></dt><dt><span class="section"><a href="#trust"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Доверять</font></font></a></span></dt><dt><span class="section"><a href="#tag-object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект тега</font></font></a></span></dt><dt><span class="section"><a href="#pack-files"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как Git эффективно хранит объекты: упаковка файлов</font></font></a></span></dt><dt><span class="section"><a href="#dangling-objects"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Болтающиеся предметы</font></font></a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Восстановление после повреждения репозитория</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#the-index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Индекс</font></font></a></span></dt></dl></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git построен на небольшом количестве простых, но эффективных идей. </font><font style="vertical-align: inherit;">Хотя можно делать вещи, не понимая их, вы найдете Git гораздо более интуитивно понятным, если вы это сделаете.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Начнем с самого важного -   </font></font><a class="link" href="#def_object_database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объектной базы данных</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и </font></font><a class="link" href="#def_index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекса</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="the-object-database"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">База данных объектов</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы уже видели в </font></font><a class="xref" href="#understanding-commits" title="Понимание истории: коммиты"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">разделе «Понимание истории: коммиты»,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> что все коммиты хранятся под 40-значным «именем объекта». </font><font style="vertical-align: inherit;">Фактически, вся информация, необходимая для представления истории проекта, хранится в объектах с такими именами. </font><font style="vertical-align: inherit;">В каждом случае имя вычисляется путем взятия хэша SHA-1 содержимого объекта. </font><font style="vertical-align: inherit;">Хэш SHA-1 - это криптографическая хеш-функция. </font><font style="vertical-align: inherit;">Для нас это означает, что невозможно найти два разных объекта с одинаковым именем. </font><font style="vertical-align: inherit;">Это имеет ряд преимуществ; </font><font style="vertical-align: inherit;">среди прочего:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Git может быстро определить, идентичны ли два объекта или нет, просто сравнив имена.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Поскольку имена объектов вычисляются одинаково в каждом репозитории, один и тот же контент, хранящийся в двух репозиториях, всегда будет храниться под одним и тем же именем.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Git может обнаруживать ошибки при чтении объекта, проверяя, что имя объекта по-прежнему является хешем SHA-1 его содержимого.
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(См. </font></font><a class="xref" href="#object-details" title="Формат хранения объекта"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Раздел «Формат хранения объекта»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для получения подробной информации о форматировании объекта и вычислении SHA-1.)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Есть четыре различных типа объектов: «blob», «tree», «commit» и «tag».</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Объект </font></font><a class="link" href="#def_blob_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">«blob»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> используется для хранения данных файла.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Объект </font></font><a class="link" href="#def_tree_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">«дерево»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> связывает один или несколько объектов «blob» в структуру каталогов. </font><font style="vertical-align: inherit;">Кроме того, объект дерева может ссылаться на другие объекты дерева, создавая таким образом иерархию каталогов.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Объект </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">«фиксация»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> связывает такие иерархии каталогов вместе в </font></font><a class="link" href="#def_DAG"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">направленный ациклический граф</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ревизий - каждая фиксация содержит имя объекта ровно одного дерева, обозначающего иерархию каталогов во время фиксации. </font><font style="vertical-align: inherit;">Кроме того, фиксация относится к «родительским» объектам фиксации, которые описывают историю того, как мы пришли к этой иерархии каталогов.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Объект </font></font><a class="link" href="#def_tag_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">«тег»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> символически идентифицирует и может использоваться для подписи других объектов. </font><font style="vertical-align: inherit;">Он содержит имя объекта и тип другого объекта, символическое имя (конечно!) И, при желании, подпись.
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подробнее о типах объектов:</font></font></p>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="commit-object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект фиксации</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект «фиксация» связывает физическое состояние дерева с описанием того, как мы туда попали и почему. </font><font style="vertical-align: inherit;">Используйте </font></font><code class="literal">--pretty=raw</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">параметр
 </font></font><a class="ulink" href="git-show.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или </font></font><a class="ulink" href="git-log.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-log (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы проверить свой любимый коммит:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show -s --pretty = raw 2be7fcb476</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
совершить 2be7fcb4764f2dbcee52635b91fedb1b3dcf7ab4</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
дерево fb3a8bdd0ceddd019615af4d57a53f43d8cee2bf</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
родитель 257a84d9d02e90447b149af58b271c19405edb6a</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
автор Дэйв Уотсон &lt;dwatson@mimvista.com&gt; 1187576872 -0400</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
коммиттер Junio ​​C Hamano &lt;gitster@pobox.com&gt; 1187591163 -0700</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    Исправить неправильное написание слова "подавить" в документах</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    Подписано: Junio ​​C Hamano &lt;gitster@pobox.com&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как видите, фиксация определяется:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
дерево: имя SHA-1 объекта дерева (как определено ниже), представляющее содержимое каталога в определенный момент времени.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
parent (s): имя (я) SHA-1 некоторого количества коммитов, которые представляют непосредственно предыдущий шаг (ы) в истории проекта. </font><font style="vertical-align: inherit;">В приведенном выше примере есть один родитель; </font><font style="vertical-align: inherit;">у коммитов слияния может быть более одного. </font><font style="vertical-align: inherit;">Коммит без родителей называется «корневым» коммитом и представляет собой начальную версию проекта. </font><font style="vertical-align: inherit;">У каждого проекта должен быть хотя бы один корень. </font><font style="vertical-align: inherit;">У проекта также может быть несколько корней, хотя это не часто (или обязательно хорошая идея).
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Автор: имя лица, ответственного за это изменение, вместе с датой.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
коммиттер: имя человека, который фактически создал коммит, с датой его совершения. </font><font style="vertical-align: inherit;">Это может отличаться от автора, например, если автор был тем, кто написал патч и отправил его по электронной почте тому, кто использовал его для создания фиксации.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
комментарий, описывающий эту фиксацию.
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что фиксация сама по себе не содержит никакой информации о том, что на самом деле изменилось; </font><font style="vertical-align: inherit;">все изменения рассчитываются путем сравнения содержимого дерева, на которое ссылается этот коммит, с деревьями, связанными с его родителями. </font><font style="vertical-align: inherit;">В частности, Git не пытается явно записывать переименования файлов, хотя он может выявить случаи, когда наличие одних и тех же данных файла при изменении путей предполагает переименование. </font><font style="vertical-align: inherit;">(См., Например,
 </font></font><code class="literal">-M</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">параметр </font></font><a class="ulink" href="git-diff.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-diff (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Коммит обычно создается с помощью </font></font><a class="ulink" href="git-commit.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-commit (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который создает коммит, родительский элемент которого обычно является текущим HEAD и чье дерево берется из содержимого, хранящегося в данный момент в индексе.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="tree-object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект дерева</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Универсальная </font><font style="vertical-align: inherit;">команда </font></font><a class="ulink" href="git-show.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> также может использоваться для исследования объектов дерева, но </font></font><a class="ulink" href="git-ls-tree.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-ls-tree (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> предоставит вам более подробную информацию:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git ls-tree fb3a8bdd0ce</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob 63c918c667fa005ff12ad89437f2fdc80926e21c .gitignore</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob 5529b198e8d14decbe4ad99db3f7fb632de0439d .mailmap</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3 КОПИРОВАНИЕ</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
040000 дерево 2fb783e477100ce076f6bf57e4a6f026013dc745 Документация</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100755 blob 3c0032cec592a765692234f1cba47dfdcc3a9200 GIT-VERSION-GEN</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob 289b046a443c0647624607d471289b2c7dcd470b УСТАНОВИТЬ</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob 4eb463797adc693dc168b926b6932ff53f17d0b1 Makefile</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob 548142c327a6790ff8821d67c2ee1eff7a656b52 README</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как видите, объект дерева содержит список записей, каждая из которых имеет режим, тип объекта, имя SHA-1 и имя, отсортированные по имени. </font><font style="vertical-align: inherit;">Он представляет собой содержимое единого дерева каталогов.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Тип объекта может быть большим двоичным объектом, представляющим содержимое файла, или другим деревом, представляющим содержимое подкаталога. </font><font style="vertical-align: inherit;">Поскольку деревья и капли, как и все другие объекты, именуются хэшем SHA-1 их содержимого, два дерева имеют одинаковое имя SHA-1 тогда и только тогда, когда их содержимое (включая, рекурсивно, содержимое всех подкаталогов) идентично . </font><font style="vertical-align: inherit;">Это позволяет Git быстро определять различия между двумя связанными объектами дерева, поскольку он может игнорировать любые записи с одинаковыми именами объектов.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(Примечание: при наличии подмодулей деревья также могут иметь фиксации в качестве записей. См. </font><font style="vertical-align: inherit;">Документацию в </font></font><a class="xref" href="#submodules" title="Глава 8. Подмодули"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">главе 8, </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подмодули</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .)</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что все файлы имеют режим 644 или 755: Git на самом деле обращает внимание только на исполняемый бит.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="blob-object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект Blob</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете использовать </font></font><a class="ulink" href="git-show.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для проверки содержимого большого двоичного объекта; </font><font style="vertical-align: inherit;">возьмем, например, каплю в записи для </font></font><code class="literal">COPYING</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">из дерева выше:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git показать 6ff87c4664</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 Обратите внимание, что единственная действующая версия GPL для этого проекта</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 касается _этой_ версии лицензии (т.е. v2, а не</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
 v2.2 или v3.x или что-то еще), если явно не указано иное.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект «blob» - это не что иное, как двоичный blob данных. </font><font style="vertical-align: inherit;">Он не ссылается ни на что другое и не имеет каких-либо атрибутов.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Поскольку большой двоичный объект полностью определяется своими данными, если два файла в дереве каталогов (или в нескольких разных версиях репозитория) имеют одинаковое содержимое, они будут совместно использовать один и тот же объект большого двоичного объекта. </font><font style="vertical-align: inherit;">Объект полностью не зависит от его местоположения в дереве каталогов, и переименование файла не меняет объект, с которым связан файл.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что любое дерево или объект blob можно исследовать с помощью
 </font></font><a class="ulink" href="git-show.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> с синтаксисом &lt;revision&gt;: &lt;path&gt;. </font><font style="vertical-align: inherit;">Иногда это может быть полезно для просмотра содержимого дерева, которое в настоящее время не извлечено.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="trust"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Доверять</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы получаете SHA-1-имя большого двоичного объекта из одного источника и его содержимое из другого (возможно, ненадежного) источника, вы все равно можете быть уверены, что это содержимое является правильным, если согласуется имя SHA-1. </font><font style="vertical-align: inherit;">Это связано с тем, что SHA-1 спроектирован таким образом, что невозможно найти различное содержимое, которое создает один и тот же хэш.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Точно так же вам нужно доверять только имени SHA-1 объекта дерева верхнего уровня, чтобы доверять содержимому всего каталога, на который он ссылается, и если вы получаете имя SHA-1 фиксации из надежного источника, тогда вы может легко проверить всю историю коммитов, доступных через родительские коммиты, и все то содержимое деревьев, на которые ссылаются эти коммиты.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Итак, чтобы обеспечить реальное доверие к системе, единственное, что вам нужно сделать, - это поставить цифровой подписью только </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">одно</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> специальное примечание, которое включает имя фиксации верхнего уровня. </font><font style="vertical-align: inherit;">Ваша цифровая подпись показывает другим, что вы доверяете этой фиксации, а неизменность истории коммитов говорит другим, что они могут доверять всей истории.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Другими словами, вы можете легко проверить весь архив, просто отправив одно электронное письмо, в котором людям будет указано имя (хэш SHA-1) верхнего коммита, и поставить цифровую подпись на это письмо, используя что-то вроде GPG / PGP.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы помочь в этом, Git также предоставляет объект тега…</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="tag-object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект тега</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект тега содержит объект, тип объекта, имя тега, имя человека («теггер»), создавшего тег, и сообщение, которое может содержать подпись, как можно увидеть с помощью </font></font><a class="ulink" href="git-cat-file.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-cat-file (1 )</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git тег cat-file v1.5.0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
объект 437b1b20df4b356c9342dac8d38849f24ef44f27</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
тип фиксации</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
тег v1.5.0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
tagger Junio ​​C Hamano &lt;junkio@cox.net&gt; 1171411200 +0000</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
GIT 1.5.0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
----- НАЧАТЬ ПОДПИСЬ PGP -----</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Версия: GnuPG v1.4.6 (GNU / Linux)</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
iD8DBQBF0lGqwMbZpPMRm5oRAuRiAJ9ohBLd7s2kqjkKlq1qqC57SbnmzQCdG4ui</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
nLE / L9aUXdWeTFPron96DLA =</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
= 2E + 0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
----- КОНЕЦ ПОДПИСЬ PGP -----</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">См. </font></font><a class="ulink" href="git-tag.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команду git-tag (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы узнать, как создавать и проверять объекты тегов. </font><font style="vertical-align: inherit;">(Обратите внимание, что </font></font><a class="ulink" href="git-tag.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-tag (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> также может использоваться для создания «легких тегов», которые вообще не являются объектами тегов, а просто простыми ссылками, имена которых начинаются с </font></font><code class="literal">refs/tags/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">).</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="pack-files"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как Git эффективно хранит объекты: упаковка файлов</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вновь созданные объекты изначально создаются в файле, названном в честь хэша SHA-1 объекта (хранящегося в </font></font><code class="literal">.git/objects</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">К сожалению, эта система становится неэффективной, если в проекте много объектов. </font><font style="vertical-align: inherit;">Попробуйте это на старом проекте:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git count-объекты</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
6930 объектов, 47620 килобайт</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Первое число - это количество объектов, которые хранятся в отдельных файлах. </font><font style="vertical-align: inherit;">Второй - это количество места, занимаемого этими «незакрепленными» объектами.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете сэкономить место и сделать Git быстрее, переместив эти незакрепленные объекты в «файл упаковки», в котором группа объектов хранится в эффективном сжатом формате; </font><font style="vertical-align: inherit;">подробности о том, как форматируются файлы пакетов, можно найти в </font></font><a class="ulink" href="technical/pack-format.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">формате пакета</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы поместить незакрепленные объекты в пакет, просто запустите git repack:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git repack</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Подсчет объектов: 6020, выполнено.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Дельта-сжатие с использованием до 4 потоков.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Сжатие объектов: 100% (6020/6020), готово.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Написание предметов: 100% (6020/6020), готово.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Итого 6020 (дельта 4070), повторно 0 (дельта 0)</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это создает единый «файл упаковки» в .git / objects / pack /, содержащий все распакованные в данный момент объекты. </font><font style="vertical-align: inherit;">Затем вы можете запустить</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git prune</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">удалить любые «незакрепленные» предметы, которые сейчас находятся в пакете. </font><font style="vertical-align: inherit;">Это также удалит все объекты, на которые нет ссылок (которые могут быть созданы, например, когда вы используете </font></font><code class="literal">git reset</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для удаления фиксации). </font><font style="vertical-align: inherit;">Вы можете убедиться, что незакрепленные объекты исчезли, посмотрев в
 </font></font><code class="literal">.git/objects</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каталог или запустив</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git count-объекты</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
0 объектов, 0 килобайт</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Хотя объектные файлы исчезли, любые команды, относящиеся к этим объектам, будут работать точно так же, как и раньше.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-gc.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-gc (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> выполняет упаковку, сокращение и многое другое, поэтому обычно это единственная команда высокого уровня, которая вам нужна.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="dangling-objects"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Болтающиеся предметы</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-fsck.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fsck (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> иногда жалуется на болтающиеся объекты. </font><font style="vertical-align: inherit;">Это не проблема.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Наиболее частая причина появления висячих объектов - это то, что вы перебазировали ветку или получили данные от кого-то другого, кто переустановил ветку - см.
 </font></font><a class="xref" href="#cleaning-up-history" title="Глава 5. Перезапись истории и поддержание серии патчей"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Главу 5, </font></font><i><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перезапись истории и поддержание серии исправлений</font></font></i></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">В этом случае старый заголовок исходной ветки все еще существует, как и все, на что он указывал. </font><font style="vertical-align: inherit;">Сам указатель ветки просто не работает, поскольку вы заменили его другим.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Есть и другие ситуации, в которых могут появиться болтающиеся предметы. </font><font style="vertical-align: inherit;">Например, «висящий двоичный объект» может возникнуть из-за того, что вы сделали </font></font><code class="literal">git add</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">часть файла, но затем, прежде чем вы фактически зафиксировали его и сделали его частью более широкой картины, вы изменили что-то еще в этом файле и зафиксировали этот </font></font><span class="strong"><strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">обновленный</font></font></strong></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> элемент - старое состояние, которое вы добавили изначально, заканчивается тем, что на него не указывает ни один коммит или дерево, поэтому теперь это висящий объект blob.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Точно так же, когда «рекурсивная» стратегия слияния запускается и обнаруживает, что существуют перекрестные слияния и, следовательно, более одной базы слияния (что довольно необычно, но случается), она сгенерирует одно временное промежуточное дерево (или, возможно, даже более того, если у вас было много пересекающихся слияний и более двух баз слияния) в качестве временной внутренней базы слияния, и, опять же, это реальные объекты, но конечный результат не будет указывать на них, поэтому они в конечном итоге будут " болтается "в вашем репозитории.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как правило, о свисающих предметах беспокоиться не о чем. </font><font style="vertical-align: inherit;">Они даже могут быть очень полезны: если вы что-то напортачите, болтающиеся объекты могут быть тем способом, которым вы восстанавливаете свое старое дерево (скажем, вы выполнили перебазирование и поняли, что на самом деле не хотите - вы можете посмотреть, что болтается). объекты, которые у вас есть, и решите вернуть голову в какое-то старое болтающееся состояние).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для коммитов вы можете просто использовать:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ gitk &lt;dangling-commit-sha-goes-here&gt; --not --all</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это запрашивает всю историю, доступную из данной фиксации, но не из какой-либо ветки, тега или другой ссылки. </font><font style="vertical-align: inherit;">Если вы решите, что это то, что вам нужно, вы всегда можете создать новую ссылку на него, например,</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git branch recovered-branch &lt;dangling-commit-sha-goes-here&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для капель и деревьев вы не можете сделать то же самое, но вы все равно можете их изучить. </font><font style="vertical-align: inherit;">Вы можете просто сделать</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git show &lt;болтающийся-blob / tree-sha-go-here&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">чтобы показать, что было содержимым большого двоичного объекта (или, для дерева, в основном, что было </font></font><code class="literal">ls</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для этого каталога), и это может дать вам некоторое представление о том, какая операция оставила этот висящий объект.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обычно свисающие капли и деревья не очень интересны. </font><font style="vertical-align: inherit;">Они почти всегда являются результатом либо наполовину базы слияния (в большом двоичном объекте часто даже присутствуют маркеры конфликта от слияния, если у вас были конфликтующие слияния, которые вы исправили вручную), либо просто потому, что вы прервали a </font></font><code class="literal">git fetch</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">с ^ C или чем-то подобным, оставляя </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">некоторые</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> новые объекты в базе данных объектов, но просто болтающиеся и бесполезные.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В любом случае, если вы уверены, что вас не интересует какое-либо зависшее состояние, вы можете просто удалить все недостижимые объекты:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git prune</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и они уйдут. </font><font style="vertical-align: inherit;">(Вам следует запускать только </font></font><code class="literal">git prune</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">неподвижный репозиторий - это похоже на восстановление файловой системы с помощью fsck: вы не хотите делать это, пока файловая система смонтирована.
 </font></font><code class="literal">git prune</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Разработана так, чтобы не причинять никакого вреда в таких случаях одновременного доступа к репозиторий, но вы можете получить запутанные или пугающие сообщения.)</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="recovering-from-repository-corruption"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Восстановление после повреждения репозитория</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">По своей природе Git осторожно относится к доверенным данным. </font><font style="vertical-align: inherit;">Однако даже при отсутствии ошибок в самом Git все еще возможно, что ошибки оборудования или операционной системы могут повредить данные.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Первая защита от таких проблем - резервное копирование. </font><font style="vertical-align: inherit;">Вы можете создать резервную копию каталога Git с помощью clone или просто используя cp, tar или любой другой механизм резервного копирования.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В крайнем случае, вы можете найти поврежденные объекты и попытаться заменить их вручную. </font><font style="vertical-align: inherit;">Сделайте резервную копию своего репозитория, прежде чем пытаться это сделать, на случай, если вы еще больше повредите что-то в процессе.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Мы предполагаем, что проблема заключается в единственном отсутствующем или поврежденном большом двоичном объекте, что иногда является решаемой проблемой. </font><font style="vertical-align: inherit;">(Восстановить пропавшие деревья и особенно коммиты </font></font><span class="strong"><strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">намного</font></font></strong></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> сложнее).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перед началом убедитесь, что есть повреждения, и выясните, где они находятся, с помощью </font></font><a class="ulink" href="git-fsck.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fsck (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ; </font><font style="vertical-align: inherit;">это может занять много времени.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Предположим, что результат выглядит так:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fsck --full --no-dangling</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
неработающая ссылка из дерева 2d9263c6d23595e7cb2a21e5ebbb53655278dff8</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
              в blob 4b9458b3786228369c63936db65827de3cc06200</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
отсутствует blob 4b9458b3786228369c63936db65827de3cc06200</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Теперь вы знаете, что blob 4b9458b3 отсутствует, и что дерево 2d9263c6 указывает на него. </font><font style="vertical-align: inherit;">Если бы вы могли найти только одну копию этого недостающего объекта blob, возможно, в каком-то другом репозитории, вы могли бы переместить ее
 </font></font><code class="literal">.git/objects/4b/9458b3...</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и сделать. </font><font style="vertical-align: inherit;">Предположим, вы не можете. </font><font style="vertical-align: inherit;">Вы все еще можете исследовать дерево, указавшее на него, с помощью </font></font><a class="ulink" href="git-ls-tree.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-ls-tree (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который может выводить что-то вроде:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git ls-tree 2d9263c6d23595e7cb2a21e5ebbb53655278dff8</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob 8d14531846b95bfa3564b58ccfb7913a034323b8 .gitignore</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob ebf9bf84da0aab5ed944264a5db2a65fe3a3e883 .mailmap</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob ca442d313d86dc67e0a2e5d584b465bd382cbf5c КОПИРОВАНИЕ</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 blob 4b9458b3786228369c63936db65827de3cc06200 myfile</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Итак, теперь вы знаете, что отсутствующий большой двоичный объект был данными для файла с именем
 </font></font><code class="literal">myfile</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">И, скорее всего, вы также сможете идентифицировать каталог - скажем, он находится в </font></font><code class="literal">somedirectory</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Если вам повезет, отсутствующая копия может быть такой же, как и копия, которую вы извлекли в своем рабочем дереве
 </font></font><code class="literal">somedirectory/myfile</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">; </font><font style="vertical-align: inherit;">вы можете проверить, правильно ли это, с помощью
 </font></font><a class="ulink" href="git-hash-object.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-hash-object (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> :</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git хэш-объект -w некоторый каталог / мой файл</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">который создаст и сохранит объект blob с содержимым somedirectory / myfile и выведет SHA-1 этого объекта. </font><font style="vertical-align: inherit;">если вам очень повезло, это может быть 4b9458b3786228369c63936db65827de3cc06200, и в этом случае вы угадали, и повреждение исправлено!</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В противном случае вам понадобится дополнительная информация. </font><font style="vertical-align: inherit;">Как узнать, какая версия файла утеряна?</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Самый простой способ сделать это:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log --raw --all --full-history - somedirectory / myfile</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Поскольку вы запрашиваете необработанный вывод, теперь вы получите что-то вроде</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">совершить abc</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Автор:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Дата:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
: 100644 100644 4b9458b newsha M somedirectory / myfile</font></font><font></font>
<font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
совершить xyz</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Автор:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Дата:</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
: 100644 100644 oldsha 4b9458b M somedirectory / myfile</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это говорит о том, что следующей за ним версией файла была «newsha», а непосредственно предшествующей версией была «oldsha». </font><font style="vertical-align: inherit;">Вы также знаете сообщения о фиксации, которые были связаны с изменением с oldsha на 4b9458b и с изменением с 4b9458b на newsha.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы совершали достаточно небольшие изменения, теперь у вас есть хороший шанс восстановить содержимое промежуточного состояния 4b9458b.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы можете это сделать, вы можете воссоздать отсутствующий объект с помощью</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git hash-object -w &lt;recreated-file&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и ваш репозиторий снова в порядке!</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(Кстати, вы могли бы проигнорировать это </font></font><code class="literal">fsck</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и начать с</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log --raw --all</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и просто искал sha отсутствующего объекта (4b9458b) во всем этом. </font><font style="vertical-align: inherit;">Это до Вы- Git действительно </font></font><span class="strong"><strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">есть</font></font></strong></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> много информации, это просто не </font><font style="vertical-align: inherit;">хватает одной конкретной версии блоб.</font></font></p>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="the-index"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Индекс</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Индекс - это двоичный файл (обычно хранящийся в нем </font></font><code class="literal">.git/index</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">), содержащий отсортированный список имен путей, каждое из которых имеет разрешения и SHA-1 объекта blob; </font></font><a class="ulink" href="git-ls-files.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-ls-files (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> может показать вам содержимое индекса:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git ls-files --stage</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0 .gitignore</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0 .mailmap</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 0 КОПИРОВАНИЕ</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 a37b2152bd26be2c2289e1f57a292534a51a93c7 0 Документация / .gitignore</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 fbefe9a45b00a54b58d94d06eca48b03d40a50e0 0 Документация / Makefile</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 2511aef8d89ab52be5ec6a5e46236b4b6bcd07ea 0 xdiff / xtypes.h</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 2ade97b2574a9f77e7ae4002a4e07a6a38e46d07 0 xdiff / xutils.c</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 d5de8292e05e7c36c4b68857c1cf9855e3d2f70a 0 xdiff / xutils.h</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что в более старой документации вы можете увидеть индекс, называемый «кеш текущего каталога» или просто «кеш». </font><font style="vertical-align: inherit;">Он имеет три важных свойства:</font></font></p>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Индекс содержит всю информацию, необходимую для создания единого (однозначно определенного) древовидного объекта.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Например, запуск </font></font><a class="ulink" href="git-commit.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-commit (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> генерирует этот объект дерева из индекса, сохраняет его в базе данных объектов и использует его как объект дерева, связанный с новой фиксацией.</font></font></p>
</li><li class="listitem">
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Индекс позволяет быстро сравнивать определяемый им объект дерева и рабочее дерево.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для этого он сохраняет некоторые дополнительные данные для каждой записи (например, время последнего изменения). </font><font style="vertical-align: inherit;">Эти данные не отображаются выше и не хранятся в созданном объекте дерева, но их можно использовать, чтобы быстро определить, какие файлы в рабочем каталоге отличаются от файлов, хранящихся в индексе, и тем самым избавить Git от необходимости читать все данные из таких файлов искать изменения.</font></font></p>
</li><li class="listitem">
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Он может эффективно представлять информацию о конфликтах слияния между различными объектами дерева, позволяя связать каждый путь с достаточной информацией об участвующих деревьях, чтобы вы могли создать трехстороннее слияние между ними.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В </font></font><a class="xref" href="#conflict-resolution" title="Получение помощи в разрешении конфликтов во время слияния"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">разделе «Получение помощи по разрешению конфликтов во время слияния»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> мы видели, </font><font style="vertical-align: inherit;">что во время слияния индекс может хранить несколько версий одного файла (так называемые «стадии»). </font><font style="vertical-align: inherit;">Третий столбец в </font><font style="vertical-align: inherit;">выходных данных </font></font><a class="ulink" href="git-ls-files.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-ls-files (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> выше - это номер стадии, и он будет принимать значения, отличные от 0 для файлов с конфликтами слияния.</font></font></p>
</li></ol></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Таким образом, индекс представляет собой своего рода временную промежуточную область, заполненную деревом, над которым вы работаете.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы полностью удалите индекс, вы, как правило, не потеряете никакой информации, если у вас есть имя дерева, которое он описывает.</font></font></p>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="submodules"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 8. Подмодули</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#pitfalls-with-submodules"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подводные камни с подмодулями</font></font></a></span></dt></dl></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Большие проекты часто состоят из небольших автономных модулей. </font><font style="vertical-align: inherit;">Например, дерево исходных кодов встроенного дистрибутива Linux будет включать все программы в дистрибутиве с некоторыми локальными модификациями; </font><font style="vertical-align: inherit;">проигрывателю фильмов может потребоваться сборка на основе определенной, заведомо работающей версии библиотеки распаковки; </font><font style="vertical-align: inherit;">несколько независимых программ могут использовать одни и те же сценарии сборки.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В централизованных системах контроля версий это часто достигается включением каждого модуля в один репозиторий. </font><font style="vertical-align: inherit;">Разработчики могут проверить все модули или только те модули, с которыми им нужно работать. </font><font style="vertical-align: inherit;">Они даже могут изменять файлы в нескольких модулях за одну фиксацию, перемещая объекты или обновляя API и переводы.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git не допускает частичной проверки, поэтому дублирование этого подхода в Git вынудило бы разработчиков хранить локальную копию модулей, которые им неинтересны. </font><font style="vertical-align: inherit;">Фиксация при огромной проверке будет медленнее, чем вы ожидаете, поскольку Git должен будет сканировать каждый каталог на предмет изменений. </font><font style="vertical-align: inherit;">Если у модулей много местной истории, клоны потребуются вечно.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">С другой стороны, распределенные системы контроля версий могут намного лучше интегрироваться с внешними источниками. </font><font style="vertical-align: inherit;">В централизованной модели один произвольный моментальный снимок внешнего проекта экспортируется из его собственной системы контроля версий, а затем импортируется в локальную систему контроля версий в ветви поставщика. </font><font style="vertical-align: inherit;">Вся история скрыта. </font><font style="vertical-align: inherit;">С распределенным контролем версий вы можете клонировать всю внешнюю историю и намного проще следить за разработкой и повторно объединять локальные изменения.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Поддержка подмодуля Git позволяет репозиторию содержать в качестве подкаталога извлечение внешнего проекта. </font><font style="vertical-align: inherit;">Подмодули сохраняют свою индивидуальность; </font><font style="vertical-align: inherit;">поддержка подмодулей просто сохраняет местоположение репозитория подмодулей и идентификатор фиксации, поэтому другие разработчики, которые клонируют содержащий проект («суперпроект»), могут легко клонировать все подмодули одной и той же ревизии. </font><font style="vertical-align: inherit;">Возможны частичные проверки суперпроекта: вы можете указать Git клонировать ни один, некоторые или все подмодули.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-submodule.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-submodule (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> доступна с Git 1.5.3. </font><font style="vertical-align: inherit;">Пользователи Git 1.5.2 могут искать коммиты подмодуля в репозитории и вручную проверять их; </font><font style="vertical-align: inherit;">более ранние версии вообще не распознают подмодули.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы увидеть, как работает поддержка подмодулей, создайте четыре примера репозиториев, которые можно будет использовать позже как подмодуль:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ mkdir ~ / git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd ~ / git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ для i в abcd</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
делать</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        mkdir $ i</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        cd $ i</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        git init</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        echo "модуль $ i"&gt; $ i.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        git добавить $ i.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        git commit -m "Начальная фиксация, подмодуль $ i"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        CD ..</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
сделанный</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Теперь создайте суперпроект и добавьте все подмодули:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ mkdir супер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd super</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git init</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ для i в abcd</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
делать</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        подмодуль git добавить ~ / git / $ i $ i</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
сделанный</font></font></pre>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Запись</font></font></h3>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Не используйте здесь локальные URL, если планируете опубликовать свой суперпроект!</font></font></p>
</div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Посмотрите, какие файлы </font></font><code class="literal">git submodule</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">созданы:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ ls -a</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
. </font><font style="vertical-align: inherit;">.. .git .gitmodules abcd</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><code class="literal">git submodule add &lt;repo&gt; &lt;path&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">делает пару вещей:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Он клонирует подмодуль из </font></font><code class="literal">&lt;repo&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">данного </font></font><code class="literal">&lt;path&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в текущий каталог и по умолчанию проверяет главную ветвь.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Он добавляет путь клонирования подмодуля в </font><font style="vertical-align: inherit;">файл </font></font><a class="ulink" href="gitmodules.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">gitmodules (5)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и добавляет этот файл в индекс, готовый к </font><a class="ulink" href="gitmodules.html" target="_top"><font style="vertical-align: inherit;">фиксации</font></a><font style="vertical-align: inherit;"> .
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Он добавляет текущий идентификатор фиксации подмодуля в индекс, готовый к фиксации.
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Зафиксируйте суперпроект:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git commit -m "Добавить подмодули a, b, c и d."</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Теперь клонируем суперпроект:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ cd ..</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git clone супер клонированный</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd клонирован</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Каталоги подмодулей есть, но они пусты:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ ls -aa</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
. </font><font style="vertical-align: inherit;">..</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git статус подмодуля</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
-d266b9873ad50488163457f025db7cdd9683d88b a</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
-e81d457da15309b4fef4249aba9b50187999670d b</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
-c1536a972b9affea0f16e0680ba87332dc059146 c</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
-d96249ff5d57de5de093e6baff9e0aafa5276a74 d</font></font></pre>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Запись</font></font></h3>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Имена объектов фиксации, показанные выше, будут для вас другими, но они должны совпадать с именами объектов фиксации HEAD ваших репозиториев. </font><font style="vertical-align: inherit;">Вы можете проверить это, запустив </font></font><code class="literal">git ls-remote ../a</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
</div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Удаление субмодулей - это двухэтапный процесс. </font><font style="vertical-align: inherit;">Сначала запустите, </font></font><code class="literal">git submodule
init</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">чтобы добавить URL-адреса репозитория подмодулей в </font></font><code class="literal">.git/config</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git submodule init</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Теперь используйте </font></font><code class="literal">git submodule update</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для клонирования репозиториев и проверки коммитов, указанных в суперпроекте:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git обновление подмодуля</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd a</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ ls -a</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
. </font><font style="vertical-align: inherit;">.. .git a.txt</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Одно из основных различий между </font></font><code class="literal">git submodule update</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">git submodule add</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">состоит в том, что </font></font><code class="literal">git submodule update</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">проверяет конкретную фиксацию, а не вершину ветки. </font><font style="vertical-align: inherit;">Это как проверка тега: голова отсоединена, значит, вы не работаете над веткой.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git ветка</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
* (отсоединено от d266b98)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  мастер</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы хотите внести изменения в подмодуль и у вас есть отдельная голова, вам следует создать или проверить ветку, внести изменения, опубликовать изменение в подмодуле, а затем обновить суперпроект, чтобы он ссылался на новую фиксацию:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch мастер</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git переключатель -c исправление</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тогда</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ echo "повторное добавление строки" &gt;&gt; a.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit -a -m "Обновил подмодуль из суперпроекта."</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git push</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd ..</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
diff --git a / ab / a</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
индекс d266b98..261dfac 160000</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
--- а / а</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+++ б / у</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
@@ -1 +1 @@</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
-Подпроект коммит d266b9873ad50488163457f025db7cdd9683d88b</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ Подпроект коммит 261dfac35cb99d380eb966e102c1197139f7fa24</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git добавить</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit -m "Обновленный подмодуль a."</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git push</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы должны бежать </font></font><code class="literal">git submodule update</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">после того, </font></font><code class="literal">git pull</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">если вы хотите обновить подмодули тоже.</font></font></p>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="pitfalls-with-submodules"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подводные камни с подмодулями</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Всегда публикуйте изменение подмодуля перед публикацией изменения в суперпроекте, который на него ссылается. </font><font style="vertical-align: inherit;">Если вы забудете опубликовать изменение подмодуля, другие не смогут клонировать репозиторий:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ cd ~ / git / super / а</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ echo, я добавил в этот файл еще одну строчку &gt;&gt; a.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit -a -m "на этот раз делаем неправильно"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd ..</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git добавить</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit -m "Снова обновлен подмодуль a."</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git push</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd ~ / git / cloned</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git pull</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git обновление подмодуля</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ошибка: pathspec '261dfac35cb99d380eb966e102c1197139f7fa24' не соответствует ни одному файлу (файлам), известным git.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Вы забыли "git add"?</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Невозможно оформить заказ '261dfac35cb99d380eb966e102c1197139f7fa24' в пути подмодуля 'a'</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В более старых версиях Git можно легко забыть о фиксации новых или измененных файлов в подмодуле, что незаметно приводит к таким же проблемам, как отказ от внесения изменений в подмодуль. </font><font style="vertical-align: inherit;">Начиная с Git 1.7.0 </font></font><code class="literal">git status</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">git diff</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
в суперпроекте, </font><font style="vertical-align: inherit;">и </font><font style="vertical-align: inherit;">в суперпроекте подмодули отображаются как измененные, если они содержат новые или измененные файлы, для защиты от случайной фиксации такого состояния. </font></font><code class="literal">git
diff</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">также добавит a </font></font><code class="literal">-dirty</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">к стороне рабочего дерева при генерации вывода патча или используется с </font></font><code class="literal">--submodule</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">опцией:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git diff</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
diff --git a / sub b / sub</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
--- a / sub</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+++ б / суб</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
@@ -1 +1 @@</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
-Подпроект коммит 3f356705649b5d566d97ff843cf193359229a453</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ Подпроект коммит 3f356705649b5d566d97ff843cf193359229a453-dirty</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff --submodule</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Субмодуль sub 3f35670..3f35670-dirty:</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы также не должны перематывать ветки в подмодуле, кроме коммитов, которые когда-либо были записаны в любом суперпроекте.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Не безопасно запускать, </font></font><code class="literal">git submodule update</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">если вы внесли и зафиксировали изменения в подмодуле, не проверив сначала ветку. </font><font style="vertical-align: inherit;">Они будут тихо перезаписаны:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ cat a.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
модуль а</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Строка $ echo добавлена ​​из private2 &gt;&gt; a.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit -a -m "строка добавлена ​​внутри private2"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd ..</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git обновление подмодуля</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Путь к подмодулю 'a': проверено 'd266b9873ad50488163457f025db7cdd9683d88b'</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd a</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cat a.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
модуль а</font></font></pre>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Запись</font></font></h3>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изменения все еще видны в журнале ссылок подмодуля.</font></font></p>
</div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если в рабочем дереве подмодуля есть незафиксированные изменения, </font></font><code class="literal">git
submodule update</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">они не будут перезаписаны. </font><font style="vertical-align: inherit;">Вместо этого вы получите обычное предупреждение о невозможности переключения с грязной ветки.</font></font></p>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="low-level-operations"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 9. Низкоуровневые операции Git</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#object-manipulation"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Доступ к объектам и манипулирование</font></font></a></span></dt><dt><span class="section"><a href="#the-workflow"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Рабочий процесс</font></font></a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочий каталог → индекс</font></font></a></span></dt><dt><span class="section"><a href="#index-to-object-database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекс → база данных объектов</font></font></a></span></dt><dt><span class="section"><a href="#object-database-to-index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">база данных объектов → индекс</font></font></a></span></dt><dt><span class="section"><a href="#index-to-working-directory"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекс → рабочий каталог</font></font></a></span></dt><dt><span class="section"><a href="#tying-it-all-together"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Связывая все вместе</font></font></a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение данных</font></font></a></span></dt><dt><span class="section"><a href="#merging-multiple-trees"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объединение нескольких деревьев</font></font></a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объединение нескольких деревьев, продолжение</font></font></a></span></dt></dl></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Многие высокоуровневые команды изначально были реализованы как сценарии оболочки с использованием меньшего ядра низкоуровневых команд Git. </font><font style="vertical-align: inherit;">Они все еще могут быть полезны при выполнении необычных вещей с Git или просто как способ понять его внутреннюю работу.</font></font></p>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="object-manipulation"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Доступ к объектам и манипулирование</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-cat-file.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-cat-file (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> может отображать содержимое любого объекта, хотя </font><font style="vertical-align: inherit;">более полезна </font><font style="vertical-align: inherit;">команда </font></font><a class="ulink" href="git-show.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-show (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> более </font><font style="vertical-align: inherit;">высокого уровня </font><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-commit-tree.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-commit-tree (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> позволяет создавать коммиты с произвольными родителями и деревьями.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Дерево можно создать с помощью </font></font><a class="ulink" href="git-write-tree.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-write-tree (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> а доступ к его данным можно получить с помощью </font></font><a class="ulink" href="git-ls-tree.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-ls-tree (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Два дерева можно сравнить с
 </font></font><a class="ulink" href="git-diff-tree.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-diff-tree (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Тег создается с помощью </font></font><a class="ulink" href="git-mktag.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-mktag (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , а подпись можно проверить с помощью </font></font><a class="ulink" href="git-verify-tag.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-verify-tag (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , хотя обычно проще использовать </font></font><a class="ulink" href="git-tag.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-tag (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для обоих.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="the-workflow"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Рабочий процесс</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Операции высокого уровня, такие как </font></font><a class="ulink" href="git-commit.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-commit (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и
 </font></font><a class="ulink" href="git-restore.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-restore (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> работают путем перемещения данных между рабочим деревом, индексом и базой данных объектов. </font><font style="vertical-align: inherit;">Git предоставляет низкоуровневые операции, которые выполняют каждый из этих шагов индивидуально.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как правило, все операции Git работают с индексным файлом. </font><font style="vertical-align: inherit;">Некоторые операции работают </font></font><span class="strong"><strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">только</font></font></strong></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> с индексным файлом (показывая текущее состояние индекса), но большинство операций перемещают данные между индексным файлом и либо базой данных, либо рабочим каталогом. </font><font style="vertical-align: inherit;">Таким образом, есть четыре основных комбинации:</font></font></p>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="working-directory-to-index"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочий каталог → индекс</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Команда </font></font><a class="ulink" href="git-update-index.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-update-index (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> обновляет индекс информацией из рабочего каталога. </font><font style="vertical-align: inherit;">Обычно вы обновляете информацию индекса, просто указывая имя файла, которое вы хотите обновить, например:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git update-index имя файла</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">но чтобы избежать типичных ошибок с подстановкой имен файлов и т. д., команда обычно не добавляет полностью новые записи или удаляет старые записи, то есть обычно просто обновляет существующие записи кэша.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы сказать Git , </font><font style="vertical-align: inherit;">что да, вы действительно понимаете , </font><font style="vertical-align: inherit;">что некоторые файлы больше не существует, или что новые файлы должны быть добавлены, вы должны использовать </font></font><code class="literal">--remove</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">--add</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">флаги соответственно.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">НОТА! </font></font><code class="literal">--remove</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Флаг вовсе </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> означает , </font><font style="vertical-align: inherit;">что последующие имена файлов обязательно будут удалены: если файлы по- </font><font style="vertical-align: inherit;">прежнему существуют в вашей структуре каталогов, индекс будет обновляться с их новым статусом, не удаляются. </font><font style="vertical-align: inherit;">Единственное, что </font></font><code class="literal">--remove</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">означает, что update-index будет рассматривать удаленный файл как действительный, и если файл действительно больше не существует, он соответственно обновит индекс.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В качестве особого случая вы также можете сделать </font></font><code class="literal">git update-index --refresh</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, что обновит статистическую информацию каждого индекса, чтобы она соответствовала текущей статистической информации. </font><font style="vertical-align: inherit;">Он </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> будет </font><font style="vertical-align: inherit;">обновлять сам статус объекта, а будет обновлять только поля, которые используются для быстрой проверки, соответствует ли объект его старому объекту резервного хранилища.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ранее представленный </font></font><a class="ulink" href="git-add.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-add (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> - это просто оболочка для
 </font></font><a class="ulink" href="git-update-index.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-update-index (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="index-to-object-database"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекс → база данных объектов</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы записываете свой текущий индексный файл в объект "дерево" с помощью программы.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git дерево записи</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">у которого нет никаких опций - он просто запишет текущий индекс в набор объектов дерева, которые описывают это состояние, и вернет имя результирующего дерева верхнего уровня. </font><font style="vertical-align: inherit;">Вы можете использовать это дерево для повторного создания индекса в любое время, двигаясь в другом направлении:</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="object-database-to-index"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">база данных объектов → индекс</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы читаете «древовидный» файл из объектной базы данных и используете его для заполнения (и перезаписи - не делайте этого, если ваш индекс содержит несохраненное состояние, которое вы, возможно, захотите восстановить позже!) Вашего текущего индекса. </font><font style="vertical-align: inherit;">Нормальная работа просто</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git read-tree &lt;SHA-1 дерева&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и ваш индексный файл теперь будет эквивалентен дереву, которое вы сохранили ранее. </font><font style="vertical-align: inherit;">Однако это только ваш </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индексный</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> файл: содержимое вашего рабочего каталога не было изменено.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="index-to-working-directory"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекс → рабочий каталог</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы обновляете свой рабочий каталог из индекса, «извлекая» файлы. </font><font style="vertical-align: inherit;">Это не очень распространенная операция, поскольку обычно вы просто обновляете свои файлы и вместо того, чтобы писать в рабочий каталог, вы сообщаете индексным файлам об изменениях в вашем рабочем каталоге (т.е. </font></font><code class="literal">git update-index</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Однако, если вы решите перейти к новой версии, проверить чью-то версию или просто восстановить предыдущее дерево, вы заполните свой индексный файл деревом чтения, а затем вам нужно будет проверить результат с помощью</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git checkout-index имя файла</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или, если вы хотите проверить весь индекс, используйте </font></font><code class="literal">-a</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">НОТА! </font></font><code class="literal">git checkout-index</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">как правило , </font><font style="vertical-align: inherit;">отказывается от перезаписи старых файлов, поэтому если у </font><font style="vertical-align: inherit;">вас есть старая версия дерева уже проверил, вам необходимо будет использовать </font></font><code class="literal">-f</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">флаг ( </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">перед</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> тем на </font></font><code class="literal">-a</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">флаг или имя файла) , </font><font style="vertical-align: inherit;">чтобы
 </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">заставить</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> проверку.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Наконец, есть несколько лишних вещей, которые не просто переходят от одного представления к другому:</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="tying-it-all-together"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Связывая все вместе</font></font></h3></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы зафиксировать дерево, с которым вы создали экземпляр </font></font><code class="literal">git write-tree</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, вы должны создать объект «фиксация», который ссылается на это дерево и историю, стоящую за ним, в первую очередь «родительский» коммит, который предшествовал ему в истории.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обычно «фиксация» имеет одного родителя: предыдущее состояние дерева до внесения определенного изменения. </font><font style="vertical-align: inherit;">Однако иногда у него может быть два или более родительских коммита, и в этом случае мы называем это «слиянием» из-за того, что такая фиксация объединяет («сливает») два или более предыдущих состояния, представленных другими коммитами.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Другими словами, в то время как «дерево» представляет конкретное состояние рабочего каталога, «фиксация» представляет это состояние во времени и объясняет, как мы туда попали.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы создаете объект фиксации, давая ему дерево, описывающее состояние во время фиксации, и список родителей:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git commit-tree &lt;дерево&gt; -p &lt;parent&gt; [(-p &lt;parent2&gt;) ...]</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">а затем указать причину фиксации на стандартном вводе (либо путем перенаправления из канала или файла, либо просто набрав его на tty).</font></font></p>
<p><code class="literal">git commit-tree</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вернет имя объекта, который представляет эту фиксацию, и вы должны сохранить его для дальнейшего использования. </font><font style="vertical-align: inherit;">Обычно вы фиксируете новое </font></font><code class="literal">HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">состояние, и хотя Git не заботится о том, где вы сохраняете примечание об этом состоянии, на практике мы обычно просто записываем результат в файл, на который указывает </font></font><code class="literal">.git/HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, чтобы мы всегда могли видеть, что последнее зафиксированное состояние было.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вот картинка, которая показывает, как разные части сочетаются друг с другом:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">                     дерево фиксации</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                      совершить объект</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                       + ---- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                       | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                       | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                       VV</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    + ----------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    | </font><font style="vertical-align: inherit;">БД объекта |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    | </font><font style="vertical-align: inherit;">Поддержка |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    | </font><font style="vertical-align: inherit;">Магазин |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    + ----------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                       ^</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
           дерево письма | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
             дерево obj | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                       | </font><font style="vertical-align: inherit;">| </font><font style="vertical-align: inherit;">дерево чтения</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                       | </font><font style="vertical-align: inherit;">| </font><font style="vertical-align: inherit;">дерево объект</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                             V</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    + ----------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    | </font><font style="vertical-align: inherit;">Индекс |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    | </font><font style="vertical-align: inherit;">«тайник» |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    + ----------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         индекс обновления ^</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
             blob obj | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                       | </font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    checkout-index -u | </font><font style="vertical-align: inherit;">| </font><font style="vertical-align: inherit;">кассовый индекс</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
             stat | </font><font style="vertical-align: inherit;">| </font><font style="vertical-align: inherit;">blob obj</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                             V</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    + ----------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    | </font><font style="vertical-align: inherit;">Рабочая |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    | </font><font style="vertical-align: inherit;">Справочник |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                    + ----------- +</font></font></pre>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="examining-the-data"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение данных</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете изучить данные, представленные в базе данных объектов и индексе, с помощью различных вспомогательных инструментов. </font><font style="vertical-align: inherit;">Для каждого объекта вы можете использовать
 </font></font><a class="ulink" href="git-cat-file.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-cat-file (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чтобы изучить подробную информацию об объекте:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git cat-file -t &lt;имя объекта&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">показывает тип объекта, и как только у вас есть тип (который обычно подразумевается в том, где вы найдете объект), вы можете использовать</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git cat-file blob | tree | commit | tag &lt;имя объекта&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">чтобы показать его содержимое. </font><font style="vertical-align: inherit;">НОТА! </font><font style="vertical-align: inherit;">Деревья имеют двоичное содержимое, и в результате есть специальный помощник для отображения этого содержимого, называемый
 </font></font><code class="literal">git ls-tree</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, который превращает двоичное содержимое в более легко читаемую форму.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Особенно поучительно смотреть на объекты "фиксации", поскольку они, как правило, маленькие и не требуют пояснений. </font><font style="vertical-align: inherit;">В частности, если вы следуете соглашению о наличии верхнего имени фиксации </font></font><code class="literal">.git/HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, вы можете сделать</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git cat-file commit HEAD</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">чтобы увидеть, какой был самый верхний коммит.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="merging-multiple-trees"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объединение нескольких деревьев</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git может помочь вам выполнить трехстороннее слияние, которое, в свою очередь, можно использовать для многостороннего слияния, повторяя процедуру слияния несколько раз. </font><font style="vertical-align: inherit;">Обычно вы выполняете только одно трехстороннее слияние (согласование двух строк истории) и фиксируете результат, но, если хотите, вы можете объединить несколько веток за один раз.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы выполнить трехстороннее слияние, вы начинаете с двух коммитов, которые хотите слить, находите их ближайшего общего родителя (третий коммит) и сравниваете деревья, соответствующие этим трем коммитам.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы получить "основу" для слияния, найдите общий родительский элемент двух коммитов:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git merge-base &lt;commit1&gt; &lt;commit2&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это печатает имя фиксации, на которой они оба основаны. </font><font style="vertical-align: inherit;">Теперь вы должны найти объекты дерева этих коммитов, что вы легко можете сделать с помощью</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git cat-file commit &lt;commitname&gt; | </font><font style="vertical-align: inherit;">голова -1</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">поскольку информация об объекте дерева всегда является первой строкой в ​​объекте фиксации.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как только вы знаете три дерева, которые вы собираетесь объединить (одно «исходное» дерево, также известное как общее дерево, и два «результирующих» дерева, иначе говоря, ветви, которые вы хотите объединить), вы выполняете «объединение», считывая индекс. </font><font style="vertical-align: inherit;">Он будет жаловаться, если ему придется выбросить ваше старое содержимое индекса, поэтому вы должны убедиться, что вы их зафиксировали - на самом деле вы обычно всегда выполняете слияние с вашим последним коммитом (что, таким образом, должно соответствовать тому, что у вас есть в вашем в любом случае текущий индекс).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы выполнить слияние, сделайте</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git read-tree -m -u &lt;origtree&gt; &lt;yourtree&gt; &lt;targettree&gt;</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">который будет выполнять все тривиальные операции слияния за вас прямо в индексном файле, и вы можете просто записать результат с помощью
 </font></font><code class="literal">git write-tree</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="merging-multiple-trees-2"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объединение нескольких деревьев, продолжение</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">К сожалению, многие слияния нетривиальны. </font><font style="vertical-align: inherit;">Если есть файлы, которые были добавлены, перемещены или удалены, или если обе ветви изменили один и тот же файл, у вас останется дерево индексов, которое содержит в себе «элементы слияния». </font><font style="vertical-align: inherit;">Такое индексное дерево </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">НЕ МОЖЕТ</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> быть записано в объект дерева, и вам придется разрешать любые такие конфликты слияния с помощью других инструментов, прежде чем вы сможете записать результат.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы можете проверить такое состояние индекса с помощью </font></font><code class="literal">git ls-files --unmerged</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
команды. </font><font style="vertical-align: inherit;">Пример:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git дерево чтения -m $ orig HEAD $ target</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git ls-files --unmerged</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 263414f423d0e4d70dae8fe53fa34614ff3e2860 1 hello.c</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 06fa6a24256dc7e560efa5687fa84b51f0263c3a 2 hello.c</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
100644 cc44c73eb783565da5831b4d820c962954019b69 3 hello.c</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Каждая строка </font></font><code class="literal">git ls-files --unmerged</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вывода начинается с битов режима больших двоичных </font><font style="vertical-align: inherit;">объектов </font><font style="vertical-align: inherit;">, большого двоичного объекта SHA-1, </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">номера стадии</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и имени файла. </font><font style="vertical-align: inherit;">Номер </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">этапа</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> - это способ Git сказать, из какого дерева он произошел: этап 1 соответствует </font></font><code class="literal">$orig</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дереву, этап 2 - </font></font><code class="literal">HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дереву, этап 3 - </font></font><code class="literal">$target</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дереву.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ранее мы говорили, что внутри выполняются тривиальные слияния
 </font></font><code class="literal">git read-tree -m</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Например, если файл не изменялся от </font></font><code class="literal">$orig</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">до </font></font><code class="literal">HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или </font></font><code class="literal">$target</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, или если файл изменен с </font></font><code class="literal">$orig</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">к </font></font><code class="literal">HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">$orig</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">к таким </font></font><code class="literal">$target</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">же образом, очевидно , </font><font style="vertical-align: inherit;">что конечный результат является то , </font><font style="vertical-align: inherit;">что в </font></font><code class="literal">HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">В приведенном выше примере показано, что файл </font></font><code class="literal">hello.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">был изменен с
 </font></font><code class="literal">$orig</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">на </font></font><code class="literal">HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">$orig</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">на </font></font><code class="literal">$target</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">другим способом. </font><font style="vertical-align: inherit;">Вы можете решить эту проблему, запустив свою любимую программу трехстороннего слияния, например   </font></font><code class="literal">diff3</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, </font></font><code class="literal">merge</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или собственный файл слияния Git, на объектах blob из этих трех этапов самостоятельно, например:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git cat-file blob 263414f&gt; hello.c ~ 1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git cat-file blob 06fa6a2&gt; hello.c ~ 2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git cat-file blob cc44c73&gt; hello.c ~ 3</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git файл слияния hello.c ~ 2 hello.c ~ 1 hello.c ~ 3</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это оставит результат слияния в </font></font><code class="literal">hello.c~2</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">файле вместе с маркерами конфликта, если есть конфликты. </font><font style="vertical-align: inherit;">Убедившись, что результат слияния имеет смысл, вы можете сообщить Git, каков окончательный результат слияния для этого файла:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ mv -f hello.c ~ 2 hello.c</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git update-index hello.c</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда путь находится в «несоединенном» состоянии, запуск </font></font><code class="literal">git update-index</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">по этому пути указывает Git пометить путь как разрешенный.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Выше приведено описание слияния Git на самом низком уровне, чтобы помочь вам понять, что концептуально происходит под капотом. </font><font style="vertical-align: inherit;">На практике никто, даже сам Git, не запускается </font></font><code class="literal">git cat-file</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для этого трижды. </font><font style="vertical-align: inherit;">Есть </font></font><code class="literal">git merge-index</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">программа, которая извлекает этапы во временные файлы и вызывает на них скрипт «слияния»:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git merge-index git-merge-one-file hello.c</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и это то, с чем </font></font><code class="literal">git merge -s resolve</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">реализован </font><font style="vertical-align: inherit;">более высокий уровень </font><font style="vertical-align: inherit;">.</font></font></p>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="hacking-git"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 10. Взлом Git</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#object-details"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Формат хранения объекта</font></font></a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исходный код Git с высоты птичьего полета</font></font></a></span></dt></dl></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В этой главе рассматриваются внутренние детали реализации Git, которые, вероятно, должны понимать только разработчики Git.</font></font></p>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="object-details"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Формат хранения объекта</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Все объекты имеют статически определенный «тип», который определяет формат объекта (то есть, как он используется и как он может относиться к другим объектам). </font><font style="vertical-align: inherit;">В настоящее время существует четыре различных типа объектов: «blob», «tree», «commit» и «tag».</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Независимо от типа объекта, все объекты имеют следующие характеристики: все они дефлированы с помощью zlib и имеют заголовок, который не только указывает их тип, но также предоставляет информацию о размере данных в объекте. </font><font style="vertical-align: inherit;">Стоит отметить, что хэш SHA-1, который используется для имени объекта, является хешем исходных данных плюс этот заголовок, поэтому </font></font><code class="literal">sha1sum</code> <span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">файл</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> не соответствует имени объекта для </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">файла</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В результате общую согласованность объекта всегда можно проверить независимо от содержимого или типа объекта: все объекты могут быть проверены путем проверки того, что (а) их хэши соответствуют содержимому файла и (б) объект успешно раздувается до потока байтов, который образует последовательность
 </font></font><code class="literal">&lt;ascii type without space&gt; + &lt;space&gt; + &lt;ascii decimal size&gt; +
&lt;byte\0&gt; + &lt;binary object data&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Структурированные объекты могут быть дополнительно проверены на их структуру и связь с другими объектами. </font><font style="vertical-align: inherit;">Обычно это делается с помощью </font></font><code class="literal">git fsck</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">программы, которая генерирует полный граф зависимостей всех объектов и проверяет их внутреннюю согласованность (в дополнение к простой проверке их поверхностной согласованности с помощью хеша).</font></font></p>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="birdview-on-the-source-code"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исходный код Git с высоты птичьего полета</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Новым разработчикам не всегда легко разобраться в исходном коде Git. </font><font style="vertical-align: inherit;">Этот раздел дает вам небольшое руководство, чтобы показать, с чего начать.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Хорошее место для начала - это содержимое первоначального коммита:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git переключатель --detach e83c5163</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Первоначальная редакция закладывает основу почти всего, что есть у Git сегодня, но она достаточно мала, чтобы ее можно было прочитать за один присест.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что после этой версии терминология изменилась. </font><font style="vertical-align: inherit;">Например, README в этой версии использует слово «набор изменений» для описания того, что мы теперь называем </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксацией</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Кроме того, мы больше не называем это "кешем", а скорее "индексом"; </font><font style="vertical-align: inherit;">однако файл по-прежнему вызывается </font></font><code class="literal">cache.h</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Примечание: Не так </font><font style="vertical-align: inherit;">много причин , </font><font style="vertical-align: inherit;">чтобы изменить это сейчас, тем более , </font><font style="vertical-align: inherit;">что нет никакой пользы одно имя для него в </font><font style="vertical-align: inherit;">любом случае, потому что это в </font><font style="vertical-align: inherit;">основном </font><font style="vertical-align: inherit;">заголовочный файл , </font><font style="vertical-align: inherit;">который включен </font><span class="emphasis"><em><font style="vertical-align: inherit;">все</font></em></span><font style="vertical-align: inherit;"> источники Git в C.</font></font><span class="emphasis"><em><font style="vertical-align: inherit;"></font></em></span><font style="vertical-align: inherit;"></font><span class="emphasis"><em><font style="vertical-align: inherit;"></font></em></span><font style="vertical-align: inherit;"></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вы уловили идеи этого первоначального коммита, вам следует проверить более свежую версию и просмотреть </font></font><code class="literal">cache.h</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, </font></font><code class="literal">object.h</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">commit.h</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вначале Git (в традициях UNIX) представлял собой набор чрезвычайно простых программ, которые вы использовали в сценариях, перенаправляя выходные данные одной в другую. </font><font style="vertical-align: inherit;">Это оказалось хорошо для начальной разработки, так как было легче тестировать новые вещи. </font><font style="vertical-align: inherit;">Однако в последнее время многие из этих частей стали встроенными, а часть ядра была «либифицирована», то есть помещена в libgit.a по соображениям производительности, переносимости и во избежание дублирования кода.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">К настоящему времени вы знаете, что такое индекс (и найдете в нем соответствующие структуры данных </font></font><code class="literal">cache.h</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">), и что существует всего несколько типов объектов (капли, деревья, коммиты и теги), которые наследуют свою общую структуру, от
 </font></font><code class="literal">struct object</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">которой является их первый член (и, таким образом, вы можете использовать приведение, например,
 </font></font><code class="literal">(struct object *)commit</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для достижения того </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">же,</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> что и </font></font><code class="literal">&amp;commit-&gt;object</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, например, для получения имени объекта и флагов).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Сейчас хороший момент, чтобы сделать перерыв, чтобы впитать эту информацию.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Следующий шаг: познакомимся с именованием объекта. </font><font style="vertical-align: inherit;">Прочтите </font></font><a class="xref" href="#naming-commits" title="Именование коммитов"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">раздел «Именование коммитов»</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Существует довольно много способов назвать объект (и не только ревизиями!). </font><font style="vertical-align: inherit;">Все это обрабатывается </font></font><code class="literal">sha1_name.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Просто взгляните на функцию </font></font><code class="literal">get_sha1()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Большая часть специальной обработки выполняется функциями, подобными </font></font><code class="literal">get_sha1_basic()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или подобными.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это просто для того, чтобы вы познакомились с самой популярной частью Git: обходчиком версий.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">По сути, первоначальная версия </font></font><code class="literal">git log</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">была сценарием оболочки:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git-rev-list --pretty $ (git-rev-parse --default HEAD "$ @") | </font><font style="vertical-align: inherit;">\</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        LESS = -S $ {PAGER: -less}</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Что это значит?</font></font></p>
<p><code class="literal">git rev-list</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">это исходная версия обходчика ревизий, которая
 </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">всегда</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> выводила список ревизий на стандартный вывод. </font><font style="vertical-align: inherit;">Он по-прежнему работает и должен работать, поскольку большинство новых команд Git начинаются с использования сценариев
 </font></font><code class="literal">git rev-list</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><code class="literal">git rev-parse</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">уже не так важно; </font><font style="vertical-align: inherit;">он использовался только для фильтрации параметров, относящихся к различным командам сантехники, которые вызывались сценарием.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Большая часть того, что </font></font><code class="literal">git rev-list</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">было, содержится в </font></font><code class="literal">revision.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и
 </font></font><code class="literal">revision.h</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Он оборачивает параметры в структуру с именем </font></font><code class="literal">rev_info</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, которая контролирует, как и какие ревизии проходят, и многое другое.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Первоначальную работу </font></font><code class="literal">git rev-parse</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">теперь выполняет функция
 </font></font><code class="literal">setup_revisions()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, которая анализирует версии и общие параметры командной строки для обходчика версий. </font><font style="vertical-align: inherit;">Эта информация сохраняется в структуре
 </font></font><code class="literal">rev_info</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для дальнейшего использования. </font><font style="vertical-align: inherit;">После вызова вы можете выполнить собственный синтаксический анализ параметров командной строки </font></font><code class="literal">setup_revisions()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">После этого вы должны вызвать
 </font></font><code class="literal">prepare_revision_walk()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">инициализацию, а затем вы можете получать коммиты одну за другой с помощью функции </font></font><code class="literal">get_revision()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Если вас интересуют более подробные сведения о процессе обхода ревизий, просто взгляните на первую реализацию </font></font><code class="literal">cmd_log()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">; </font><font style="vertical-align: inherit;">вызовите
 </font></font><code class="literal">git show v1.3.0~155^2~4</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и прокрутите вниз до этой функции (обратите внимание, что вам больше не нужно вызывать </font></font><code class="literal">setup_pager()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">напрямую).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В настоящее время </font></font><code class="literal">git log</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">это встроенная функция, что означает, что она </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">содержится</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> в команде </font></font><code class="literal">git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Исходная сторона встроенной функции</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
вызываемая функция </font></font><code class="literal">cmd_&lt;bla&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, обычно определяемая в </font></font><code class="literal">builtin/&lt;bla.c&gt;</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
(обратите внимание, что раньше она использовалась в более старых версиях Git </font></font><code class="literal">builtin-&lt;bla&gt;.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
) и объявлялась в </font></font><code class="literal">builtin.h</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
запись в </font></font><code class="literal">commands[]</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">массиве </font></font><code class="literal">git.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
запись в </font></font><code class="literal">BUILTIN_OBJECTS</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в </font></font><code class="literal">Makefile</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Иногда в одном исходном файле содержится более одной встроенной функции. </font><font style="vertical-align: inherit;">Например, </font></font><code class="literal">cmd_whatchanged()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и </font></font><code class="literal">cmd_log()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">оба они находятся внутри </font></font><code class="literal">builtin/log.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, поскольку у них довольно много общего кода. </font><font style="vertical-align: inherit;">В этом случае команда , </font><font style="vertical-align: inherit;">которые
 </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> названы как </font></font><code class="literal">.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">файл , </font><font style="vertical-align: inherit;">в котором они живут , </font><font style="vertical-align: inherit;">должна быть перечислена в
 </font></font><code class="literal">BUILT_INS</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в </font></font><code class="literal">Makefile</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><code class="literal">git log</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> в C выглядит сложнее, чем в исходном скрипте, но это обеспечивает гораздо большую гибкость и производительность.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Здесь снова стоит сделать паузу.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Урок третий: изучите код. </font><font style="vertical-align: inherit;">На самом деле, это лучший способ узнать об организации Git (после того, как вы узнаете основные концепции).</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Итак, подумайте о чем-то, что вас интересует, например, «как я могу получить доступ к BLOB-объекту, просто зная его имя объекта?». </font><font style="vertical-align: inherit;">Первый шаг - найти команду Git, с помощью которой вы сможете это сделать. </font><font style="vertical-align: inherit;">В этом примере это либо
 </font></font><code class="literal">git show</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или </font></font><code class="literal">git cat-file</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Для ясности остановимся на этом </font></font><code class="literal">git cat-file</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, потому что он</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
сантехника, и
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
присутствовал даже в начальной фиксации (буквально прошло всего около 20 ревизий, так как </font></font><code class="literal">cat-file.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">был переименован в </font></font><code class="literal">builtin/cat-file.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
при создании встроенной функции, а затем увидел менее 10 версий).
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Итак, ищите </font></font><code class="literal">builtin/cat-file.c</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, ищите </font></font><code class="literal">cmd_cat_file()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и смотрите, что он делает.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        git_config (git_default_config);</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        если (argc! = 3)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                использование ("git cat-file [-t | -s | -e | -p | &lt;type&gt;] &lt;sha1&gt;");</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        если (get_sha1 (argv [2], sha1))</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                die ("Недействительное имя объекта% s", argv [2]);</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Давайте пропустим очевидные детали; </font><font style="vertical-align: inherit;">единственная действительно интересная часть здесь - это звонок </font></font><code class="literal">get_sha1()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Он пытается интерпретировать </font></font><code class="literal">argv[2]</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">как имя объекта, и если он ссылается на объект, который присутствует в текущем репозитории, он записывает полученный SHA-1 в переменную </font></font><code class="literal">sha1</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Здесь интересны две вещи:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
<code class="literal">get_sha1()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">возвращает 0 в случае </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">успеха</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Это может удивить некоторых начинающих хакеров Git, но в UNIX существует давняя традиция возвращать разные отрицательные числа в случае разных ошибок и 0 в случае успеха.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
переменная </font></font><code class="literal">sha1</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в сигнатуре функции </font></font><code class="literal">get_sha1()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">есть </font></font><code class="literal">unsigned
char *</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, но на самом деле ожидается, что это указатель на </font></font><code class="literal">unsigned
char[20]</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Эта переменная будет содержать 160-битный SHA-1 данного коммита. </font><font style="vertical-align: inherit;">Обратите внимание, что всякий раз, когда SHA-1 передается как </font></font><code class="literal">unsigned char *</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, это двоичное представление, в отличие от представления ASCII в шестнадцатеричных символах, которое передается как </font></font><code class="literal">char *</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></li></ul></div>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вы увидите обе эти вещи в коде.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Теперь по мясу:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        case 0:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                buf = read_object_with_reference (sha1, argv [1], &amp; size, NULL);</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вот как вы читаете blob (на самом деле, не только blob, но и любой тип объекта). </font><font style="vertical-align: inherit;">Чтобы узнать, как на </font></font><code class="literal">read_object_with_reference()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">самом деле работает </font><font style="vertical-align: inherit;">функция </font><font style="vertical-align: inherit;">, найдите для нее исходный код (что-то вроде </font></font><code class="literal">git grep
read_object_with | grep ":[a-z]"</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозитория Git) и прочтите исходный код.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Чтобы узнать, как можно использовать результат, просто прочтите </font></font><code class="literal">cmd_cat_file()</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        write_or_die (1, буфер, размер);</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Иногда вы не знаете, где искать функцию. </font><font style="vertical-align: inherit;">Во многих таких случаях помогает поиск в выводе </font></font><code class="literal">git log</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, а затем </font></font><code class="literal">git show</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в соответствующем коммите.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Пример: если вы знаете, что был какой-то тестовый пример </font></font><code class="literal">git bundle</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, но не помните, где он был (да, вы </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">могли</font></font></em></span> <code class="literal">git grep bundle t/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , но это не иллюстрирует суть!):</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log --no-merges t /</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В pager ( </font></font><code class="literal">less</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">) просто найдите «bundle», вернитесь на несколько строк назад и увидите, что он находится в фиксации 18449ab0. </font><font style="vertical-align: inherit;">Теперь просто скопируйте это имя объекта и вставьте его в командную строку.</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git показать 18449ab0</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вуаля.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Другой пример: узнайте, что нужно сделать, чтобы сделать какой-нибудь скрипт встроенным:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git log --no-merges --diff-filter = Встроенный / *. c</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Видите ли, Git на самом деле лучший инструмент, чтобы узнать об источнике самого Git!</font></font></p>
</div>
</div>
<div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="glossary"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Глава 11. Глоссарий Git</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#git-explained"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git объяснил</font></font></a></span></dt></dl></div>

<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="git-explained"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git объяснил</font></font></h2></div></div></div>

<div class="variablelist"><dl class="variablelist"><dt><span class="term"><a name="def_alternate_object_database"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">база данных альтернативных объектов</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
С помощью альтернативного механизма </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозиторий</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
может наследовать часть своей </font></font><a class="link" href="#def_object_database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объектной базы данных</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
от другой объектной базы данных, которая называется «альтернативной».
</font></font></dd><dt><span class="term"><a name="def_bare_repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">голый репозиторий</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Открытый репозиторий - это обычно </font></font><a class="link" href="#def_directory"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каталог</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> с </font><font style="vertical-align: inherit;">соответствующим именем </font><font style="vertical-align: inherit;">и </font></font><code class="literal">.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">суффиксом, в котором нет локально извлеченной копии любого из файлов, находящихся под контролем версий. </font><font style="vertical-align: inherit;">То есть все административные и управляющие файлы Git, которые обычно присутствуют в скрытом </font></font><code class="literal">.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">подкаталоге, </font></font><code class="literal">repository.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вместо этого </font><font style="vertical-align: inherit;">присутствуют непосредственно в
 </font><font style="vertical-align: inherit;">каталоге, и никакие другие файлы не присутствуют и не извлекаются. </font><font style="vertical-align: inherit;">Обычно издатели публичных репозиториев делают доступными голые репозитории.
</font></font></dd><dt><span class="term"><a name="def_blob_object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект blob</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Нетипизированный </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , например, содержимое файла.
</font></font></dd><dt><span class="term"><a name="def_branch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветвь</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
«Ветка» - это активное направление развития. </font><font style="vertical-align: inherit;">Самая последняя
 </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксация</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> в ветке называется вершиной этой ветки. </font><font style="vertical-align: inherit;">На вершину ветви ссылается </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">головка</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ветви
 </font><font style="vertical-align: inherit;">, которая перемещается вперед по мере того, как в ветви выполняется дополнительная разработка. </font><font style="vertical-align: inherit;">Один </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозиторий</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Git
 </font><font style="vertical-align: inherit;">может отслеживать произвольное количество ветвей, но ваше </font></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочее дерево</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> связано только с одной из них («текущая» или «извлеченная» ветвь), а </font></font><a class="link" href="#def_HEAD"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">HEAD</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> указывает на эту ветвь.
</font></font></dd><dt><span class="term"><a name="def_cache"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тайник</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Устарело для: </font></font><a class="link" href="#def_index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">index</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_chain"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">цепь</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Список объектов, где каждый </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> в списке содержит ссылку на своего преемника (например, преемник
 </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксации</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> может быть одним из его </font></font><a class="link" href="#def_parent"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">родителей</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ).
</font></font></dd><dt><span class="term"><a name="def_changeset"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">набор изменений</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
BitKeeper / cvsps означает « </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксацию</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ». </font><font style="vertical-align: inherit;">Поскольку Git не сохраняет изменения, а утверждает, что на самом деле нет смысла использовать термин «наборы изменений» в Git.
</font></font></dd><dt><span class="term"><a name="def_checkout"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">проверять, выписываться</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Действие обновления всех или частей
 </font></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочего дерева</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> с </font></font><a class="link" href="#def_tree_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объектом дерева</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
или </font></font><a class="link" href="#def_blob_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">сгустком</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> из
 </font></font><a class="link" href="#def_object_database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">базы данных объектов</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , а также </font><font style="vertical-align: inherit;">обновления
 </font></font><a class="link" href="#def_index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекса</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и </font></font><a class="link" href="#def_HEAD"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ГОЛОВУ</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , если все рабочее дерево было отмечено в новом </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">филиале</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_cherry-picking"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">сбор вишни</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
На </font><font style="vertical-align: inherit;">жаргоне </font></font><a class="link" href="#def_SCM"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SCM</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> «выбор вишни» означает выбор подмножества изменений из серии изменений (обычно фиксация) и запись их в виде новой серии изменений поверх другой кодовой базы. </font><font style="vertical-align: inherit;">В Git это выполняется командой «git cherry-pick», чтобы извлечь изменение, внесенное существующей </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксацией,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и записать его на основе кончика текущей </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> как новую фиксацию.
</font></font></dd><dt><span class="term"><a name="def_clean"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">чистый</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Работает дерево</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> является чистым, если он соответствует </font></font><a class="link" href="#def_revision"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">пересмотру</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , на которую ссылаются текущими
 </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">головами</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Также см. « </font></font><a class="link" href="#def_dirty"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Грязный</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ».
</font></font></dd><dt><span class="term"><a name="def_commit"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">совершить</font></font></span></dt><dd>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как существительное: единственный пункт в истории Git; </font><font style="vertical-align: inherit;">вся история проекта представлена ​​как набор взаимосвязанных коммитов. </font><font style="vertical-align: inherit;">Слово «фиксация» часто используется Git в тех же местах, где другие системы контроля версий используют слова «ревизия» или «версия». </font><font style="vertical-align: inherit;">Также используется как сокращение для </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объекта фиксации</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как глагол: действие по сохранению нового снимка состояния проекта в истории Git путем создания нового коммита, представляющего текущее состояние </font></font><a class="link" href="#def_index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекса,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и продвижения </font></font><a class="link" href="#def_HEAD"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">HEAD,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
чтобы он указывал на новый коммит.</font></font></p>
</dd><dt><span class="term"><a name="def_commit_object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">зафиксировать объект</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который содержит информацию о конкретном </font></font><a class="link" href="#def_revision"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">пересмотре</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , таких , </font><font style="vertical-align: inherit;">как </font></font><a class="link" href="#def_parent"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">родители</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , коммиттер, автор, дата и </font></font><a class="link" href="#def_tree_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект дерева</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который соответствует верхней </font></font><a class="link" href="#def_directory"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">директории</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> сохраненной версии.
</font></font></dd><dt><span class="term"><a name="def_commit-ish"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">коммит-иш (также коммитит)</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Объект </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксации</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или
 </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> который может быть рекурсивно разыменован на объект фиксации. </font><font style="vertical-align: inherit;">Ниже приведены все объекты фиксации: объект фиксации, объект </font></font><a class="link" href="#def_tag_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тега</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , указывающий на объект фиксации, объект тега, указывающий на объект тега, указывающий на объект фиксации, и т. Д.
</font></font></dd><dt><span class="term"><a name="def_core_git"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ядро Git</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Основные структуры данных и утилиты Git. </font><font style="vertical-align: inherit;">Предоставляет только ограниченные инструменты управления исходным кодом.
</font></font></dd><dt><span class="term"><a name="def_DAG"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">DAG</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Направленный ациклический граф. </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Фиксации объекты</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> образуют ориентированный ациклический граф, потому что они имеют родитель (направленный), и график фиксации объектов ациклический (нет </font></font><a class="link" href="#def_chain"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">цепи</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , 
которая начинается и заканчивается с тем же </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объектом</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ).
</font></font></dd><dt><span class="term"><a name="def_dangling_object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">болтающийся предмет</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_unreachable_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Недоступен Объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который не
 </font></font><a class="link" href="#def_reachable"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">доступен</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> даже из других недоступных объектов; </font><font style="vertical-align: inherit;">висящий объект не имеет ссылок на него из любой ссылки или </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> в </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозитории</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_detached_HEAD"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">отдельная ГОЛОВА</font></font></span></dt><dd>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обычно </font></font><a class="link" href="#def_HEAD"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">HEAD</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> хранит имя
 </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , а команды, которые работают с историей, которую представляет HEAD, работают с историей, ведущей к вершине ветки, на которую указывает HEAD. </font><font style="vertical-align: inherit;">Однако Git также позволяет </font></font><a class="link" href="#def_checkout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">проверить</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> произвольный
 </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">коммит,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> который не обязательно является вершиной какой-либо конкретной ветки. </font><font style="vertical-align: inherit;">ГОЛОВА в таком состоянии называется «отсоединенной».</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что команды, которые работают с историей текущей ветки (например, </font></font><code class="literal">git commit</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">для создания новой истории поверх нее), все еще работают, пока HEAD отключен. </font><font style="vertical-align: inherit;">Они обновляют HEAD, чтобы указать на верхушку обновленной истории, не затрагивая ни одну ветку. </font><font style="vertical-align: inherit;">Команды, которые обновляют или запрашивают информацию </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">о</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> текущей ветке (например, </font></font><code class="literal">git
branch --set-upstream-to</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">которая устанавливает, с какой ветвью удаленного отслеживания интегрируется текущая ветвь), очевидно, не работают, поскольку в этом состоянии нет (реальной) текущей ветки, о которой можно было бы спросить.</font></font></p>
</dd><dt><span class="term"><a name="def_directory"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каталог</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Список, который вы получите с "ls" :-)
</font></font></dd><dt><span class="term"><a name="def_dirty"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">грязный</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Работает дерево</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> называется «грязным» , </font><font style="vertical-align: inherit;">если она содержит изменения , </font><font style="vertical-align: inherit;">которые не были </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">совершены</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> в текущей
 </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветке</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_evil_merge"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">злое слияние</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Злое слияние - это </font></font><a class="link" href="#def_merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">слияние,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> которое вносит изменения, которых нет ни в одном </font></font><a class="link" href="#def_parent"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">родителе</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_fast_forward"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">перемотка вперед</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Быстрая перемотка вперед - это особый тип </font></font><a class="link" href="#def_merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">слияния, при</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> котором у вас есть
 </font></font><a class="link" href="#def_revision"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ревизия</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и вы «сливаете» изменения другой
 </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , которые являются потомками того, что у вас есть. </font><font style="vertical-align: inherit;">В таком случае вы не делаете новую </font><a class="link" href="#def_commit"><font style="vertical-align: inherit;">фиксацию </font></a></font><a class="link" href="#def_merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">слияния,</font></font></a>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> а вместо этого просто обновляете его ревизию. </font><font style="vertical-align: inherit;">Это будет часто происходить в
 </font><a class="link" href="#def_remote_tracking_branch"><font style="vertical-align: inherit;">ветке удаленного отслеживания</font></a><font style="vertical-align: inherit;"> удаленного
 </font><a class="link" href="#def_repository"><font style="vertical-align: inherit;">репозитория</font></a><font style="vertical-align: inherit;"> .
</font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"></font></a><font style="vertical-align: inherit;"></font><a class="link" href="#def_remote_tracking_branch"><font style="vertical-align: inherit;"></font></a><font style="vertical-align: inherit;"></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"></font></a><font style="vertical-align: inherit;"></font></dd><dt><span class="term"><a name="def_fetch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">принести</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Получение </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> означает получение </font></font><a class="link" href="#def_head_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> на </font><font style="vertical-align: inherit;">заголовок </font><a class="link" href="#def_branch"><font style="vertical-align: inherit;">ветки</font></a><font style="vertical-align: inherit;"> из удаленного
 </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозитория</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , чтобы выяснить, какие объекты отсутствуют в локальной </font></font><a class="link" href="#def_object_database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">базе данных объектов</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , а также получить их. </font><font style="vertical-align: inherit;">См. Также </font></font><a class="ulink" href="git-fetch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fetch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_file_system"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">файловая система</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Линус Торвальдс изначально проектировал Git как файловую систему пользовательского пространства, то есть инфраструктуру для хранения файлов и каталогов. </font><font style="vertical-align: inherit;">Это обеспечило эффективность и скорость Git.
</font></font></dd><dt><span class="term"><a name="def_git_archive"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Архив Git</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Синоним </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозитория</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> (для архаичных людей).
</font></font></dd><dt><span class="term"><a name="def_gitfile"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">gitfile</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Простой файл </font></font><code class="literal">.git</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">в корне рабочего дерева, указывающий на каталог, являющийся реальным репозиторием.
</font></font></dd><dt><span class="term"><a name="def_grafts"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">прививки</font></font></span></dt><dd>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Grafts позволяет объединить две разные линии развития, записывая ложную информацию о происхождении для коммитов. </font><font style="vertical-align: inherit;">Таким образом, вы можете заставить Git делать вид, что набор </font></font><a class="link" href="#def_parent"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">родителей</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> у </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">коммита</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> отличается от того, что было записано при создании коммита. </font><font style="vertical-align: inherit;">Настраивается через </font></font><code class="literal">.git/info/grafts</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">файл.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что механизм графтов устарел и может привести к проблемам при переносе объектов между репозиториями; </font><font style="vertical-align: inherit;">см. </font></font><a class="ulink" href="git-replace.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-replace (1),</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
чтобы </font><font style="vertical-align: inherit;">узнать </font><font style="vertical-align: inherit;">о более гибкой и надежной системе, делающей то же самое.</font></font></p>
</dd><dt><span class="term"><a name="def_hash"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">хэш</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
В контексте Git - синоним </font></font><a class="link" href="#def_object_name"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">имени объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_head"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">голова</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Имя ссылка</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> на </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксацию</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> на наконечнике
 </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветви</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Головы хранятся в файле в
 </font></font><code class="literal">$GIT_DIR/refs/heads/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каталоге, кроме случаев использования упакованных ссылок. </font><font style="vertical-align: inherit;">(См.
 </font></font><a class="ulink" href="git-pack-refs.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git-pack-refs (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .)
</font></font></dd><dt><span class="term"><a name="def_HEAD"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ГОЛОВА</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Текущая </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветка</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Более подробно: ваше </font></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочее дерево</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> обычно выводится из состояния дерева, на которое ссылается HEAD. </font><font style="vertical-align: inherit;">HEAD - это ссылка на одну из
 </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">голов</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> в вашем репозитории, за исключением </font><font style="vertical-align: inherit;">случая </font><font style="vertical-align: inherit;">использования
 </font></font><a class="link" href="#def_detached_HEAD"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">отдельной HEAD</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , когда она напрямую ссылается на произвольную фиксацию.
</font></font></dd><dt><span class="term"><a name="def_head_ref"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">руководитель ref</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Синоним слова " </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">голова"</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_hook"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">крюк</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Во время обычного выполнения нескольких команд Git добавляются выноски к необязательным сценариям, которые позволяют разработчику добавлять функции или проверки. </font><font style="vertical-align: inherit;">Как правило, перехватчики позволяют предварительно проверить команду и потенциально прервать ее, а также позволяют получать пост-уведомление после завершения операции. </font><font style="vertical-align: inherit;">Скрипты ловушек находятся в
 </font></font><code class="literal">$GIT_DIR/hooks/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каталоге и активируются простым удалением </font></font><code class="literal">.sample</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">суффикса из имени файла. </font><font style="vertical-align: inherit;">В более ранних версиях Git их нужно было сделать исполняемыми.
</font></font></dd><dt><span class="term"><a name="def_index"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекс</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Набор файлов со статистической информацией, содержимое которых хранится как объекты. </font><font style="vertical-align: inherit;">Индекс - это сохраненная версия вашего
 </font></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочего дерева</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">По правде говоря, он может содержать и вторую, и даже третью версию рабочего дерева, которые используются при </font></font><a class="link" href="#def_merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">слиянии</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_index_entry"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">запись в указателе</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Информация о конкретном файле, хранящаяся в
 </font></font><a class="link" href="#def_index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">index</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Запись индекса может быть отключена, если
 </font></font><a class="link" href="#def_merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объединение</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> было начато, но еще не завершено (т.е. если индекс содержит несколько версий этого файла).
</font></font></dd><dt><span class="term"><a name="def_master"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">мастер</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ветвь</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
разработки по умолчанию </font><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Каждый раз, когда вы создаете </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозиторий</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Git </font><font style="vertical-align: inherit;">, создается ветка с именем «master», которая становится активной ветвью. </font><font style="vertical-align: inherit;">В большинстве случаев это локальная разработка, хотя это чисто условно и не требуется.
</font></font></dd><dt><span class="term"><a name="def_merge"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">слияние</font></font></span></dt><dd>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как глагол: перенести содержимое другой
 </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> (возможно, из внешнего
 </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозитория</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ) в текущую ветку. </font><font style="vertical-align: inherit;">В случае, когда объединенная ветвь находится из другого репозитория, это выполняется сначала путем </font></font><a class="link" href="#def_fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">выборки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> удаленной ветки, а затем слияния результата с текущей ветвью. </font><font style="vertical-align: inherit;">Эта комбинация операций выборки и слияния называется
 </font></font><a class="link" href="#def_pull"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вытягиванием</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Слияние выполняется автоматическим процессом, который идентифицирует изменения, внесенные с тех пор, как ветви разошлись, а затем применяет все эти изменения вместе. </font><font style="vertical-align: inherit;">В случае конфликта изменений может потребоваться ручное вмешательство для завершения слияния.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Как существительное: если только это не </font></font><a class="link" href="#def_fast_forward"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">перемотка вперед</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , успешное слияние приводит к созданию нового </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">коммита,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
представляющего результат слияния и имеющего в качестве
 </font></font><a class="link" href="#def_parent"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">родителей</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> кончики слитых </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветвей</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Эта фиксация называется «фиксацией слияния» или иногда просто «слиянием».</font></font></p>
</dd><dt><span class="term"><a name="def_object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Единица хранения в Git. </font><font style="vertical-align: inherit;">Он однозначно идентифицируется
 </font></font><a class="link" href="#def_SHA1"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SHA-1</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> его содержимого. </font><font style="vertical-align: inherit;">Следовательно, объект не может быть изменен.
</font></font></dd><dt><span class="term"><a name="def_object_database"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">база данных объектов</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Хранит набор «объектов», и отдельный </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> идентифицируется по </font></font><a class="link" href="#def_object_name"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">имени объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Предметы обычно обитают </font></font><code class="literal">$GIT_DIR/objects/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></dd><dt><span class="term"><a name="def_object_identifier"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">идентификатор объекта</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Синоним </font></font><a class="link" href="#def_object_name"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">имени объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_object_name"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">имя объекта</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Уникальный идентификатор </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Имя объекта обычно представлено шестнадцатеричной строкой из 40 символов. </font><font style="vertical-align: inherit;">Также в просторечии называется </font></font><a class="link" href="#def_SHA1"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SHA-1</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_object_type"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тип объекта</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Один из идентификаторов « </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксация</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> », « </font></font><a class="link" href="#def_tree_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дерево</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> », « </font></font><a class="link" href="#def_tag_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тег</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> » или « </font></font><a class="link" href="#def_blob_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">blob</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> », описывающий тип
 </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_octopus"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">осьминог</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Для того, чтобы </font></font><a class="link" href="#def_merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объединить</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> более двух </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветвей</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_origin"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">происхождение</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Исходный </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозиторий</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> по умолчанию </font><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">У большинства проектов есть хотя бы один проект, который они отслеживают. </font><font style="vertical-align: inherit;">По умолчанию </font><font style="vertical-align: inherit;">для этой цели </font><font style="vertical-align: inherit;">используется
 </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">происхождение</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Новые обновления восходящего потока будут загружаться в </font></font><a class="link" href="#def_remote_tracking_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки удаленного отслеживания с</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> именем origin / name-of-upstream-branch, которые вы можете увидеть с помощью
 </font></font><code class="literal">git branch -r</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></dd><dt><span class="term"><a name="def_overlay"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">наложение</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Обновляйте и добавляйте файлы только в рабочий каталог, но не удаляйте их, подобно тому, как </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">cp -R</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> обновит содержимое в целевом каталоге. </font><font style="vertical-align: inherit;">Это режим по умолчанию при
 </font></font><a class="link" href="#def_checkout"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">извлечении</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> файлов из
 </font></font><a class="link" href="#def_index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекса</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или </font></font><a class="link" href="#def_tree-ish"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дерева</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">В отличие от этого режим без наложения также удаляет отслеживаемые файлы, отсутствующие в источнике, аналогично </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">rsync --delete</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_pack"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">паковать</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Набор объектов, сжатых в один файл (для экономии места или для их эффективной передачи).
</font></font></dd><dt><span class="term"><a name="def_pack_index"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">индекс упаковки</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Список идентификаторов и другая информация об объектах в
 </font></font><a class="link" href="#def_pack"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">пакете</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , чтобы помочь в эффективном доступе к содержимому пакета.
</font></font></dd><dt><span class="term"><a name="def_pathspec"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">pathspec</font></font></span></dt><dd>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Шаблон, используемый для ограничения путей в командах Git.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Пути используются в командной строке «git ls-files», «git ls-tree», «git add», «git grep», «git diff», «git checkout» и многих других команд для ограничения области действия. операций с некоторым подмножеством дерева или рабочего дерева. </font><font style="vertical-align: inherit;">См. Документацию по каждой команде, чтобы узнать, относятся ли пути к текущему каталогу или к верхнему уровню. </font><font style="vertical-align: inherit;">Синтаксис pathspec следующий:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
любой путь совпадает с самим собой
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
путь до последней косой черты представляет префикс каталога. </font><font style="vertical-align: inherit;">Область действия этого пути ограничена этим поддеревом.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
остальная часть pathspec является шаблоном для оставшейся части имени пути. </font><font style="vertical-align: inherit;">Пути относительно префикса каталога будут сопоставлены с этим шаблоном с помощью fnmatch (3); </font><font style="vertical-align: inherit;">в частности, </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">*</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">? </font></font></em></span> <span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">может</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> соответствовать разделителям каталогов.
</font></font></li></ul></div>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Например, Documentation / *. Jpg будет соответствовать всем файлам .jpg в поддереве Documentation, включая Documentation / chapter_1 / figure_1.jpg.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Спецификация пути, начинающаяся с двоеточия, </font></font><code class="literal">:</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">имеет особое значение. </font><font style="vertical-align: inherit;">В краткой форме за ведущим двоеточием </font></font><code class="literal">:</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">следует ноль или более букв «магической подписи» (которые, возможно, заканчиваются другим двоеточием </font></font><code class="literal">:</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">), а оставшаяся часть является шаблоном для сопоставления пути. </font><font style="vertical-align: inherit;">«Волшебная подпись» состоит из символов ASCII, которые не являются ни буквенно-цифровыми, ни глобальными, ни специальными символами регулярных выражений, ни двоеточиями. </font><font style="vertical-align: inherit;">Необязательное двоеточие, завершающее «магическую подпись», можно опустить, если шаблон начинается с символа, который не принадлежит набору символов «магическая подпись» и не является двоеточием.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">В длинной форме за ведущим двоеточием </font></font><code class="literal">:</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">следует открытая скобка </font></font><code class="literal">(</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, разделенный запятыми список из нуля или более «волшебных слов» и закрывающих скобок </font></font><code class="literal">)</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, а оставшаяся часть представляет собой образец для сопоставления пути.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Указание пути только с двоеточием означает, что указание пути отсутствует. </font><font style="vertical-align: inherit;">Эта форма не должна сочетаться с другими указаниями пути.</font></font></p>
<div class="variablelist"><dl class="variablelist"><dt><span class="term"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Топ</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Волшебное слово </font></font><code class="literal">top</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(волшебная подпись :) </font></font><code class="literal">/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">обеспечивает соответствие шаблона корню рабочего дерева, даже если вы запускаете команду из подкаталога.
</font></font></dd><dt><span class="term"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">буквальный</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Подстановочные знаки в шаблоне, такие как </font></font><code class="literal">*</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или </font></font><code class="literal">?</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, рассматриваются как буквальные символы.
</font></font></dd><dt><span class="term"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">icase</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Соответствие без учета регистра.
</font></font></dd><dt><span class="term"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">шарик</font></font></span></dt><dd>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git рассматривает шаблон как оболочку, подходящую для использования fnmatch (3) с флагом FNM_PATHNAME: подстановочные знаки в шаблоне не будут соответствовать / в имени пути. </font><font style="vertical-align: inherit;">Например, «Documentation / *. Html» соответствует «Documentation / git.html», но не соответствует «Documentation / ppc / ppc.html» или «tools / perf / Documentation / perf.html».</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Две последовательные звездочки (" </font></font><code class="literal">**</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">") в образцах, совпадающих с полным путем, могут иметь особое значение:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Ведущий " </font></font><code class="literal">**</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">", за которым следует косая черта, означает соответствие во всех каталогах. </font><font style="vertical-align: inherit;">Например, " </font></font><code class="literal">**/foo</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" соответствует файлу или каталогу " </font></font><code class="literal">foo</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" где угодно, так же, как шаблон " </font></font><code class="literal">foo</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">". </font><font style="vertical-align: inherit;">" </font></font><code class="literal">**/foo/bar</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" соответствует файлу или каталогу " </font></font><code class="literal">bar</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" где угодно, что находится непосредственно под каталогом " </font></font><code class="literal">foo</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">".
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Завершающий " </font></font><code class="literal">/**</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" соответствует всему внутри. </font><font style="vertical-align: inherit;">Например, " </font></font><code class="literal">abc/**</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" соответствует всем файлам внутри каталога "abc" относительно местоположения </font></font><code class="literal">.gitignore</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">файла с бесконечной глубиной.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Косая черта, за которой следуют две звездочки подряд, затем косая черта соответствует нулю или более каталогам. </font><font style="vertical-align: inherit;">Например, « </font></font><code class="literal">a/**/b</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">соответствует» </font></font><code class="literal">a/b</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, « </font></font><code class="literal">a/x/b</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">», « </font></font><code class="literal">a/x/y/b</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">» и так далее.
</font></font></li><li class="listitem">
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Другие звездочки подряд считаются недействительными.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Магия шара несовместима с буквальной магией.</font></font></p>
</li></ul></div>
</dd><dt><span class="term"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">attr</font></font></span></dt><dd>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После </font></font><code class="literal">attr:</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">идет разделенный пробелами список «требований к атрибутам», все из которых должны быть выполнены, чтобы путь считался совпадающим; </font><font style="vertical-align: inherit;">это дополнение к обычному немагическому сопоставлению с шаблоном pathspec. </font><font style="vertical-align: inherit;">См. </font></font><a class="ulink" href="gitattributes.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Gitattributes (5)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Каждое из требований к атрибутам для пути принимает одну из следующих форм:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
" </font></font><code class="literal">ATTR</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" требует, чтобы атрибут </font></font><code class="literal">ATTR</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">был установлен.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
" </font></font><code class="literal">-ATTR</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" требует, чтобы атрибут не </font></font><code class="literal">ATTR</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">был установлен.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
" </font></font><code class="literal">ATTR=VALUE</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" требует, чтобы атрибут </font></font><code class="literal">ATTR</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">был установлен в строку </font></font><code class="literal">VALUE</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.
</font></font></li><li class="listitem">
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" </font></font><code class="literal">!ATTR</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">" требует, чтобы атрибут не </font></font><code class="literal">ATTR</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">был указан.</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обратите внимание, что при сопоставлении с объектом дерева атрибуты по-прежнему берутся из рабочего дерева, а не из данного объекта дерева.</font></font></p>
</li></ul></div>
</dd><dt><span class="term"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">исключить</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
После того, как путь совпадает с любой неисключительной спецификацией пути, он будет пропущен через все исключаемые спецификации пути (магическая подпись: </font></font><code class="literal">!</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">или ее синоним </font></font><code class="literal">^</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">). </font><font style="vertical-align: inherit;">Если он совпадает, путь игнорируется. </font><font style="vertical-align: inherit;">Когда нет неисключающего пути, исключение применяется к набору результатов, как если бы оно было вызвано без какого-либо пути.
</font></font></dd></dl></div>
</dd><dt><span class="term"><a name="def_parent"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">родитель</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Объект </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксации</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> содержит (возможно, пустой) список логических предшественников в линии разработки, то есть его родителей.
</font></font></dd><dt><span class="term"><a name="def_pickaxe"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">кирка</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Термин </font></font><a class="link" href="#def_pickaxe"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">кирка</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> относится к параметрам подпрограмм diffcore, которые помогают выбирать изменения, которые добавляют или удаляют данную текстовую строку. </font><font style="vertical-align: inherit;">С помощью этой </font></font><code class="literal">--pickaxe-all</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">опции его можно использовать для просмотра всего
 </font></font><a class="link" href="#def_changeset"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">набора изменений,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> которые вводили или удаляли, скажем, определенную строку текста. </font><font style="vertical-align: inherit;">См. </font></font><a class="ulink" href="git-diff.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git-diff (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_plumbing"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">сантехника</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Симпатичное название для </font></font><a class="link" href="#def_core_git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ядра Git</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_porcelain"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фарфор</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Симпатичное название для программ и пакетов программ в зависимости от
 </font></font><a class="link" href="#def_core_git"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ядра Git</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , представляющее высокий уровень доступа к ядру Git. </font><font style="vertical-align: inherit;">Фарфор открывает больше </font><font style="vertical-align: inherit;">
интерфейса </font></font><a class="link" href="#def_SCM"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SCM,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> чем </font></font><a class="link" href="#def_plumbing"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">водопровод</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_per_worktree_ref"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылка на дерево</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ссылки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , </font><font style="vertical-align: inherit;">
которые являются </font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;">деревом</font></a><font style="vertical-align: inherit;"> выполнения </font><font style="vertical-align: inherit;">, а не глобальными. </font><font style="vertical-align: inherit;">В настоящее время это только </font></font><a class="link" href="#def_HEAD"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">HEAD</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и все ссылки, которые начинаются с </font></font><code class="literal">refs/bisect/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">, но могут позже включать другие необычные ссылки.
</font></font></dd><dt><span class="term"><a name="def_pseudoref"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">псевдореф</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Pseudorefs - это класс файлов, в </font></font><code class="literal">$GIT_DIR</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">которых </font><font style="vertical-align: inherit;">работают </font><font style="vertical-align: inherit;">как refs для целей rev-parse, но которые обрабатываются git специально. </font><font style="vertical-align: inherit;">Оба псевдорефа имеют имена, состоящие из заглавных букв, и всегда начинаются со строки, состоящей из
 </font></font><a class="link" href="#def_SHA1"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SHA-1,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> за которым следует пробел. </font><font style="vertical-align: inherit;">Итак, HEAD - это не псевдореф, потому что иногда это символическая ссылка. </font><font style="vertical-align: inherit;">Они могут необязательно содержать некоторые дополнительные данные.  </font></font><code class="literal">MERGE_HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">и
 </font></font><code class="literal">CHERRY_PICK_HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">являются примерами. </font><font style="vertical-align: inherit;">В отличие от
 </font></font><a class="link" href="#def_per_worktree_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылок на каждое рабочее дерево</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , эти файлы не могут быть символическими ссылками и никогда не иметь журналов повторения. </font><font style="vertical-align: inherit;">Они также не могут быть обновлены с помощью обычного механизма обновления ссылок. </font><font style="vertical-align: inherit;">Вместо этого они обновляются путем прямой записи в файлы. </font><font style="vertical-align: inherit;">Однако их можно читать так, как если бы они были ссылками, поэтому они </font></font><code class="literal">git rev-parse
MERGE_HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">будут работать.
</font></font></dd><dt><span class="term"><a name="def_pull"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">вытащить</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Вытягивание </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> означает ее </font></font><a class="link" href="#def_fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">получение</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и
 </font></font><a class="link" href="#def_merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">слияние</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">См. Также </font></font><a class="ulink" href="git-pull.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-pull (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_push"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">От себя</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Нажатие </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> означает получение </font></font><a class="link" href="#def_head_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> на </font><a class="link" href="#def_head_ref"><font style="vertical-align: inherit;">голову</font></a><font style="vertical-align: inherit;"> ветки
 </font><font style="vertical-align: inherit;">из удаленного </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозитория</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , выяснение, является ли она предком локальной ссылки на голову ветки, и в этом случае размещение всех объектов, которые </font></font><a class="link" href="#def_reachable"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">доступны</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> из локальной ссылки головы и которые являются отсутствует в удаленном репозитории, в </font></font><a class="link" href="#def_object_database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">базу данных</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> удаленных
 </font><a class="link" href="#def_object_database"><font style="vertical-align: inherit;">объектов</font></a><font style="vertical-align: inherit;"> и обновляет удаленную головку ref. </font><font style="vertical-align: inherit;">Если удаленная </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">головка</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> не является предком локальной головки, отправка не выполняется.
</font></font></dd><dt><span class="term"><a name="def_reachable"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">достижимый</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Все предки данной </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксации</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> считаются «достижимыми» из этой фиксации. </font><font style="vertical-align: inherit;">В более общем смысле, один </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> доступен из другого, если мы можем добраться до одного из другого по </font></font><a class="link" href="#def_chain"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">цепочке,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
которая следует за </font></font><a class="link" href="#def_tag"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тегами</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> к тому, что они помечают,
 </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксирует</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> их к своим родителям или деревьям, а
 </font></font><a class="link" href="#def_tree_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">деревья</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> к деревьям или </font></font><a class="link" href="#def_blob_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">каплям,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
которые они содержат.
</font></font></dd><dt><span class="term"><a name="def_rebase"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">перебазировать</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Повторно применить серию изменений из </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветки</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> к другой базе и сбросить </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">заголовок</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> этой ветки к результату.
</font></font></dd><dt><span class="term"><a name="def_ref"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылка</font></font></span></dt><dd>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Имя, которое начинается с </font></font><code class="literal">refs/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">(например </font></font><code class="literal">refs/heads/master</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">), которое указывает на </font></font><a class="link" href="#def_object_name"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">имя объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или другую ссылку (последняя называется </font></font><a class="link" href="#def_symref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">символической ссылкой</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ). </font><font style="vertical-align: inherit;">Для удобства ссылку иногда можно сократить, когда она используется в качестве аргумента команды Git; </font><font style="vertical-align: inherit;">подробности см. в </font></font><a class="ulink" href="gitrevisions.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">gitrevisions (7)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
. </font><font style="vertical-align: inherit;">Ссылки хранятся в </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">репозитории</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Пространство имен ref является иерархическим. </font><font style="vertical-align: inherit;">Различные подиерархии используются для разных целей (например,
 </font></font><code class="literal">refs/heads/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">иерархия используется для представления локальных ветвей).</font></font></p>
<p class="simpara"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Есть несколько специальных ссылок, которые не начинаются с </font></font><code class="literal">refs/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Самый яркий пример </font></font><code class="literal">HEAD</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">.</font></font></p>
</dd><dt><span class="term"><a name="def_reflog"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рефлог</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Рефлог показывает местную "историю" реф. </font><font style="vertical-align: inherit;">Другими словами, он может сказать вам, какая была 3-я последняя ревизия в </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">этом</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> репозитории и каково текущее состояние в </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">этом</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> репозитории вчера в 21:14. </font><font style="vertical-align: inherit;">Подробнее см. </font></font><a class="ulink" href="git-reflog.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Git-reflog (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_refspec"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">refspec</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
"Refspec" используется методом </font></font><a class="link" href="#def_fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">fetch</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и
 </font></font><a class="link" href="#def_push"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">push</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> для описания сопоставления между удаленной
 </font></font><a class="link" href="#def_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылкой</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и локальной ссылкой.
</font></font></dd><dt><span class="term"><a name="def_remote"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">удаленный репозиторий</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Хранилище</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , которое используется для отслеживания того же проекта , </font><font style="vertical-align: inherit;">но находится где - </font><font style="vertical-align: inherit;">то в </font><font style="vertical-align: inherit;">другом месте. </font><font style="vertical-align: inherit;">Чтобы общаться с пультами, см. </font></font><a class="link" href="#def_fetch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Выборку</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или </font></font><a class="link" href="#def_push"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">толчок</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_remote_tracking_branch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">отделение удаленного отслеживания</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Исй</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который используется для отслеживания изменений из другого
 </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">хранилища</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Обычно он выглядит как
 </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">refs / remotes / foo / bar</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> (что указывает на то, что он отслеживает ветвь с именем
 </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">bar</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> на удаленном компьютере с именем </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">foo</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ) и соответствует правой стороне настроенного </font></font><a class="link" href="#def_refspec"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">refspec</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> выборки </font><font style="vertical-align: inherit;">. </font><font style="vertical-align: inherit;">Ветвь удаленного отслеживания не должна содержать прямых изменений или локальных коммитов.
</font></font></dd><dt><span class="term"><a name="def_repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">хранилище</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Коллекция </font></font><a class="link" href="#def_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ссылок</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> вместе с
 </font></font><a class="link" href="#def_object_database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">базой данных</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> объектов, содержащей все объекты, </font></font><a class="link" href="#def_reachable"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">доступные</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> из ссылок, возможно, сопровождаемые метаданными из одного или нескольких </font></font><a class="link" href="#def_porcelain"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фарфоров</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Репозиторий может совместно использовать базу данных объектов с другими репозиториями через </font></font><a class="link" href="#def_alternate_object_database"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">альтернативный механизм</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_resolve"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">разрешить</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Действие по исправлению вручную того, что </font><font style="vertical-align: inherit;">осталось после </font><font style="vertical-align: inherit;">неудачного автоматического
 </font></font><a class="link" href="#def_merge"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">слияния</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_revision"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">пересмотр</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Синоним </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">коммита</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> (существительное).
</font></font></dd><dt><span class="term"><a name="def_rewind"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">перемотка</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Отбросить часть разработки, т.е. присвоить
 </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">голову</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> более ранней </font></font><a class="link" href="#def_revision"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ревизии</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_SCM"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">СКМ</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Управление исходным кодом (инструмент).
</font></font></dd><dt><span class="term"><a name="def_SHA1"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SHA-1</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
«Алгоритм безопасного хеширования 1»; </font><font style="vertical-align: inherit;">криптографическая хеш-функция. </font><font style="vertical-align: inherit;">В контексте Git используется как синоним </font></font><a class="link" href="#def_object_name"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">имени объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_shallow_clone"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">мелкий клон</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
В основном это синоним </font></font><a class="link" href="#def_shallow_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">поверхностного репозитория,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
но эта фраза делает более ясным, что он был создан с помощью запущенной </font></font><code class="literal">git clone --depth=...</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">команды.
</font></font></dd><dt><span class="term"><a name="def_shallow_repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">неглубокое хранилище</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Мелкий </font></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">хранилище</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> имеет неполную историю некоторых из которых </font></font><a class="link" href="#def_commit"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксации</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> у </font></font><a class="link" href="#def_parent"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">родителей</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> прижигали прочь (иные слова, G велят делать вид , </font><font style="vertical-align: inherit;">что эти коммиты не имеют родителей, даже если они записаны в </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объекте коммита</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ). </font><font style="vertical-align: inherit;">Это иногда полезно, когда вас интересует только недавняя история проекта, даже если реальная история, записанная в восходящем потоке, намного больше. </font><font style="vertical-align: inherit;">Неглубокий репозиторий создается путем предоставления </font></font><code class="literal">--depth</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">опции </font></font><a class="ulink" href="git-clone.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-clone (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , а его история может быть позже расширена с помощью </font></font><a class="ulink" href="git-fetch.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-fetch (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_stash"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">запись в тайник</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> используется для временного хранения содержимого
 </font></font><a class="link" href="#def_dirty"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">грязной</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> рабочей директории и индекса для повторного использования в </font><font style="vertical-align: inherit;">будущем.
</font></font></dd><dt><span class="term"><a name="def_submodule"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">подмодуль</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Хранилище</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который содержит историю отдельного проекта внутри другого репозитория (последний из которых называется </font></font><a class="link" href="#def_superproject"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">суперпроекте</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ).
</font></font></dd><dt><span class="term"><a name="def_superproject"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">суперпроект</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Хранилище</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который ссылается на </font><font style="vertical-align: inherit;">хранилища других проектов в своем рабочем дереве как </font></font><a class="link" href="#def_submodule"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">подмодули</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Суперпроект знает имена (но не хранит копии) объектов фиксации содержащихся подмодулей.
</font></font></dd><dt><span class="term"><a name="def_symref"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">симреф</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Символическая ссылка: вместо самого </font><font style="vertical-align: inherit;">
идентификатора </font></font><a class="link" href="#def_SHA1"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SHA-1</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> она имеет формат </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ref: refs / some / thing</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и при ссылке рекурсивно разыменовывается на эту ссылку.
</font></font><span class="emphasis"><em><a class="link" href="#def_HEAD"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">HEAD</font></font></a></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> - это яркий пример файла symref. </font><font style="vertical-align: inherit;">Символические ссылки обрабатываются с помощью команды </font></font><a class="ulink" href="git-symbolic-ref.html" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">git-symbolic-ref (1)</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
.
</font></font></dd><dt><span class="term"><a name="def_tag"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тег</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ссылок</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> под </font></font><code class="literal">refs/tags/</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">пространством имен , </font><font style="vertical-align: inherit;">что указывает на объект произвольного типа ( как </font><font style="vertical-align: inherit;">правило, указывает на тег либо
 </font></font><a class="link" href="#def_tag_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тег</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или его </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">фиксации объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ). </font><font style="vertical-align: inherit;">В отличие от </font></font><a class="link" href="#def_head"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">головы</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , тег не обновляется </font></font><code class="literal">commit</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">командой. </font><font style="vertical-align: inherit;">Тег Git не имеет ничего общего с тегом Lisp (который </font><font style="vertical-align: inherit;">
в контексте Git </font><font style="vertical-align: inherit;">назывался бы </font></font><a class="link" href="#def_object_type"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">типом объекта</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ). </font><font style="vertical-align: inherit;">Тег чаще всего используется для обозначения определенной точки в </font></font><a class="link" href="#def_chain"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">цепочке</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> предков фиксации </font><font style="vertical-align: inherit;">.
</font></font></dd><dt><span class="term"><a name="def_tag_object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект тега</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , содержащий </font></font><a class="link" href="#def_ref"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">реф</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , указывающий на другой объект, который может содержать сообщение так же , </font><font style="vertical-align: inherit;">как
 </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект коммита</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Он также может содержать подпись (PGP), и в этом случае он называется «подписанный объект тега».
</font></font></dd><dt><span class="term"><a name="def_topic_branch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тематическая ветка</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Обычная </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветка</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> Git </font><font style="vertical-align: inherit;">, используемая разработчиком для определения концептуальной линии разработки. </font><font style="vertical-align: inherit;">Поскольку ветви очень просты и недороги, часто желательно иметь несколько небольших веток, каждая из которых содержит очень четко определенные концепции или небольшие инкрементальные, но связанные изменения.
</font></font></dd><dt><span class="term"><a name="def_tree"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дерево</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Либо </font></font><a class="link" href="#def_working_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочее дерево</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , либо </font></font><a class="link" href="#def_tree_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект дерева</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> вместе с зависимыми </font><font style="vertical-align: inherit;">объектами </font></font><a class="link" href="#def_blob_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">blob</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> и tree (т. Е. Сохраненное представление рабочего дерева).
</font></font></dd><dt><span class="term"><a name="def_tree_object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект дерева</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , содержащий список имен файлов и режимы , </font><font style="vertical-align: inherit;">наряду с рефами к связанному с </font><font style="vertical-align: inherit;">ними сгусток и / или объекты дерева.
</font></font><a class="link" href="#def_tree"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Дерево</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> эквивалентно </font></font><a class="link" href="#def_directory"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">директории</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_tree-ish"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">древовидный (также древовидный)</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Объект </font></font><a class="link" href="#def_tree_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">дерева</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> или </font></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объект,</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
который может быть рекурсивно разыменован на объект дерева. </font><font style="vertical-align: inherit;">Разыменование </font></font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">объекта фиксации</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> дает </font><a class="link" href="#def_commit_object"><font style="vertical-align: inherit;">объект</font></a><font style="vertical-align: inherit;"> дерева, соответствующий </font><font style="vertical-align: inherit;">верхнему </font><a class="link" href="#def_directory"><font style="vertical-align: inherit;">каталогу </font></a></font><a class="link" href="#def_revision"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ревизии</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> . </font><font style="vertical-align: inherit;">Ниже приведены все элементы дерева: </font><a class="link" href="#def_commit-ish"><font style="vertical-align: inherit;">фиксация</font></a><font style="vertical-align: inherit;"> , объект дерева, объект </font><a class="link" href="#def_tag_object"><font style="vertical-align: inherit;">тега</font></a><font style="vertical-align: inherit;"> , указывающий на объект дерева, объект тега, указывающий на объект тега, указывающий на объект дерева, и т. Д.
</font></font><a class="link" href="#def_directory"><font style="vertical-align: inherit;"></font></a><font style="vertical-align: inherit;"></font><a class="link" href="#def_commit-ish"><font style="vertical-align: inherit;"></font></a><font style="vertical-align: inherit;"></font><a class="link" href="#def_tag_object"><font style="vertical-align: inherit;"></font></a><font style="vertical-align: inherit;"></font></dd><dt><span class="term"><a name="def_unmerged_index"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">не объединенный индекс</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_index"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Индекс</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который содержит неслитые
 </font></font><a class="link" href="#def_index_entry"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">записи индекса</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> .
</font></font></dd><dt><span class="term"><a name="def_unreachable_object"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">недостижимый объект</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_object"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Объект</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , который не </font></font><a class="link" href="#def_reachable"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">доступен</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> из
 </font></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветви</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , </font></font><a class="link" href="#def_tag"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">тега</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , или любой другой ссылки.
</font></font></dd><dt><span class="term"><a name="def_upstream_branch"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ветвь вверх по течению</font></font></span></dt><dd><font style="vertical-align: inherit;"></font><a class="link" href="#def_branch"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Ветвь по</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 
умолчанию, </font><font style="vertical-align: inherit;">которая объединяется с рассматриваемой ветвью (или ветвь, о которой идет речь, перемещается на) </font><font style="vertical-align: inherit;">Он настраивается через branch. &lt;name&gt; .remote и branch. &lt;name&gt; .merge. </font><font style="vertical-align: inherit;">Если восходящей ветвью </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">A</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> является </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">origin / B,</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> иногда мы говорим: « </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">A</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> отслеживает </font></font><span class="emphasis"><em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">origin / B</font></font></em></span><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> ».
</font></font></dd><dt><span class="term"><a name="def_working_tree"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">рабочее дерево</font></font></span></dt><dd><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Дерево реально извлеченных файлов. </font><font style="vertical-align: inherit;">Рабочее дерево обычно содержит содержимое </font><font style="vertical-align: inherit;">дерева фиксации </font></font><a class="link" href="#def_HEAD"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">HEAD</font></font></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> , а также любые локальные изменения, которые вы сделали, но еще не зафиксировали.
</font></font></dd></dl></div>
</div>
</div>
<div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="git-quick-start"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Приложение A. Краткое руководство по Git</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#quick-creating-a-new-repository"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание нового репозитория</font></font></a></span></dt><dt><span class="section"><a href="#managing-branches"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Управление филиалами</font></font></a></span></dt><dt><span class="section"><a href="#exploring-history"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение истории</font></font></a></span></dt><dt><span class="section"><a href="#making-changes"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Внесение изменений</font></font></a></span></dt><dt><span class="section"><a href="#merging"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Слияние</font></font></a></span></dt><dt><span class="section"><a href="#sharing-your-changes"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Делимся вашими изменениями</font></font></a></span></dt><dt><span class="section"><a href="#repository-maintenance"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обслуживание репозитория</font></font></a></span></dt></dl></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Это краткое изложение основных команд; </font><font style="vertical-align: inherit;">в предыдущих главах более подробно объясняется, как они работают.</font></font></p>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="quick-creating-a-new-repository"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создание нового репозитория</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Из тарбола:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ tar xzf project.tar.gz</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd project</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git init</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Инициализированный пустой репозиторий Git в .git /</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git add.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Из удаленного репозитория:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git clone git: //example.com/pub/project.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ cd project</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="managing-branches"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Управление филиалами</font></font></h2></div></div></div>

<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git branch # перечислить все локальные ветки в этом репо</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git switch test # переключить рабочий каталог на ветку "test"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch new # создать ветку "new", начиная с текущей HEAD</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch -d new # удалить ветку "new"</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Вместо того, чтобы основывать новую ветку на текущем HEAD (по умолчанию), используйте:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git branch new test # ветка с именем "test"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch new v2.6.15 # тег с именем v2.6.15</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch new HEAD ^ # коммит перед самым последним</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch new HEAD ^^ # перед этим зафиксировать</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch new test ~ 10 # десять коммитов перед веткой "test"</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Создайте новую ветку и переключитесь на нее одновременно:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git switch -c новый v2.6.15</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обновите и изучите ветки репозитория, из которого вы клонировали:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch # update</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch -r # список</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  происхождение / хозяин</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  происхождение / следующий</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  ...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git switch -c источник мастерской работы / мастер</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получите ветку из другого репозитория и дайте ей новое имя в своем репозитории:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fetch git: //example.com/project.git theirbranch: mybranch</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git fetch git: //example.com/project.git v2.6.15: mybranch</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Составьте список репозиториев, с которыми вы регулярно работаете:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Пример удаленного добавления $ git git: //example.com/project.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git remote # список удаленных репозиториев</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
пример</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
происхождение</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git пример удаленного показа # подробности</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
* удаленный пример</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  URL: git: //example.com/project.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  Отслеживаемые удаленные филиалы</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    мастер</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    следующий</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    ...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git fetch example # обновить ветки из примера</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git branch -r # перечислить все удаленные ветки</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="exploring-history"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Изучение истории</font></font></h2></div></div></div>

<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ gitk # визуализировать и просматривать историю</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log # перечислить все коммиты</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log src / # ... изменение src /</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log v2.6.15..v2.6.16 # ... в v2.6.16, а не в v2.6.15</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log master..test # ... в ветке test, а не в ветке master</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log test..master # ... в ветке master, но не в тесте</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log test ... master # ... в одной ветке, а не в обеих</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log -S'foo () '# ... где разница содержит "foo ()"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log --since = "2 недели назад"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git log -p # также показать исправления</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show # самая последняя фиксация</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff v2.6.15..v2.6.16 # разница между двумя версиями с тегами</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git diff v2.6.15..HEAD # diff с текущей головой</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git grep "foo ()" # поиск в рабочем каталоге для "foo ()"</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git grep v2.6.15 "foo ()" # поиск "foo ()" в старом дереве</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git show v2.6.15: a.txt # посмотреть старую версию a.txt</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Искать регрессии:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git bisect start</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git bisect bad # текущая версия плохая</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git bisect good v2.6.13-rc2 # последняя удачная ревизия</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Деление пополам: 675 ревизий осталось протестировать после этого</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                                # тест здесь, затем:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git bisect good # если эта ревизия хорошая, или</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git bisect bad # если эта ревизия плохая.</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                                # повторять до готовности.</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="making-changes"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Внесение изменений</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Убедитесь, что Git знает, кого винить:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ cat &gt;&gt; ~ / .gitconfig &lt;&lt; \ EOF</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[пользователь]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        name = Ваше имя здесь</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        email = you@yourdomain.example.com</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
EOF</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Выберите содержимое файла для включения в следующую фиксацию, затем сделайте фиксацию:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git add a.txt # обновленный файл</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git add b.txt # новый файл</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git rm c.txt # старый файл</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Или подготовьте и создайте фиксацию за один шаг:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git commit d.txt # использовать только последнее содержимое d.txt</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git commit -a # использовать последнее содержимое всех отслеживаемых файлов</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="merging"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Слияние</font></font></h2></div></div></div>

<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git merge test # объединить ветку "test" в текущую ветку</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git pull git: //example.com/project.git master</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                   # получение и слияние в удаленной ветке</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git pull. </font><font style="vertical-align: inherit;">test # эквивалентно git merge test</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sharing-your-changes"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Делимся вашими изменениями</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Импорт или экспорт патчей:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git format-patch origin..HEAD # форматировать патч для каждой фиксации</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
                                # в HEAD, но не в origin</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
$ git am mbox # импортировать патчи из почтового ящика "mbox"</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Получите ветку в другом репозитории Git, а затем объедините ее с текущей веткой:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git pull git: //example.com/project.git theirbranch</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Сохраните полученную ветку в локальной ветке перед слиянием с текущей веткой:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git pull git: //example.com/project.git theirbranch: mybranch</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">После создания коммитов в локальной ветке обновите удаленную ветку своими коммитами:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push ssh: //example.com/project.git mybranch: theirbranch</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Когда и удаленная, и локальная ветвь названы "test":</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git push ssh: //example.com/project.git test</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Версия ярлыка для часто используемого удаленного репозитория:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git пример удаленного добавления ssh: //example.com/project.git</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Пример теста $ git push</font></font></pre>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="repository-maintenance"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Обслуживание репозитория</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Проверить на коррупцию:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git fsck</font></font></pre>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Перепрессовать, удалить неиспользованный мусор:</font></font></p>
<pre class="screen"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$ git gc</font></font></pre>
</div>
</div>
<div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="todo"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Приложение Б. Примечания и список дел для этого руководства</font></font></h1></div></div></div><div class="toc"><p><b><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Оглавление</font></font></b></p><dl class="toc"><dt><span class="section"><a href="#todo-list"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Список дел</font></font></a></span></dt></dl></div>

<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="todo-list"></a><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Список дел</font></font></h2></div></div></div>

<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Работа в процессе.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Основные требования:</font></font></p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
Он должен быть читаемым по порядку, от начала до конца, кем-то со знанием дела с базовыми знаниями командной строки UNIX, но без каких-либо специальных знаний Git. </font><font style="vertical-align: inherit;">При необходимости следует особо указать любые другие предпосылки по мере их возникновения.
</font></font></li><li class="listitem"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
По возможности, заголовки разделов должны четко описывать задачу, которую они объясняют, как выполнять, на языке, который не требует дополнительных знаний, чем необходимо: например, «импорт патчей в проект», а не « </font></font><code class="literal">git am</code><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">команда»
</font></font></li></ul></div>
<p>Think about how to create a clear chapter dependency graph that will
allow people to get to important topics without necessarily reading
everything in between.</p>
<p>Scan <code class="literal">Documentation/</code> for other stuff left out; in particular:</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
howto’s
</li><li class="listitem">
some of <code class="literal">technical/</code>?
</li><li class="listitem">
hooks
</li><li class="listitem">
list of commands in <a class="ulink" href="git.html" target="_top">git(1)</a>
</li></ul></div>
<p>Scan email archives for other stuff left out</p>
<p>Scan man pages to see if any assume more background than this manual
provides.</p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Добавьте еще хороших примеров. </font><font style="vertical-align: inherit;">Целые разделы просто примеров поваренной книги могут быть хорошей идеей; </font><font style="vertical-align: inherit;">может быть, сделать раздел «расширенных примеров» стандартным разделом в конце главы?</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">При необходимости включите перекрестные ссылки на глоссарий.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Добавьте раздел по работе с другими системами контроля версий, включая CVS, Subversion и просто импорт серий архивов релизов.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Напишите главу об использовании сантехники и написании сценариев.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Альтернативы, ссылка на клон и т. Д.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Подробнее о восстановлении после повреждения репозитория. </font><font style="vertical-align: inherit;">См .:
	 </font></font><a class="ulink" href="https://lore.kernel.org/git/Pine.LNX.4.64.0702272039540.12485@woody.linux-foundation.org/" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">https://lore.kernel.org/git/Pine.LNX.4.64.0702272039540.12485@woody.linux-foundation.org/ </font></font></a>
	<a class="ulink" href="https://lore.kernel.org/git/Pine.LNX.4.64.0702141033400.3604@woody.linux-foundation.org/" target="_top"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">https://lore.kernel.org/git/Pine.LNX.4.64.0702141033400.3604@ woody.linux-foundation.org/</font></font></a></p>
</div>
</div>
</div><div id="goog-gt-tt" class="skiptranslate" dir="ltr"><div style="padding: 8px;"><div><div class="logo"><img src="https://www.gstatic.com/images/branding/product/1x/translate_24dp.png" width="20" height="20" alt="Google Переводчик"></div></div></div><div class="top" style="padding: 8px; float: left; width: 100%;"><h1 class="title gray">Исходный текст</h1></div><div class="middle" style="padding: 8px;"><div class="original-text"></div></div><div class="bottom" style="padding: 8px;"><div class="activity-links"><span class="activity-link">Предложить лучший вариант перевода</span><span class="activity-link"></span></div><div class="started-activity-container"><hr style="color: #CCC; background-color: #CCC; height: 1px; border: none;"><div class="activity-root"></div></div></div><div class="status-message" style="display: none;"></div></div>
<div class="goog-te-spinner-pos"><div class="goog-te-spinner-animation"><svg xmlns="http://www.w3.org/2000/svg" class="goog-te-spinner" width="96px" height="96px" viewBox="0 0 66 66"><circle class="goog-te-spinner-path" fill="none" stroke-width="6" stroke-linecap="round" cx="33" cy="33" r="30"></circle></svg></div></div></body>